オーディオサンプルレートの変更方法

このQ&Aのポイント
  • Windows XPの環境でWAVファイルのサンプルレートを変更する方法について教えてください。
  • 現在は16bit, 22kHzのWAVファイルを16bit, 8kHzに変換する処理を行っていますが、サンプルレートの変更が行えません。
  • mciSendStringを使用して音声ファイルを再生させる手順は分かりますが、サンプルレートを変更する方法がわかりません。もっと複雑な処理が必要なのでしょうか。別の方法があれば教えてください。
回答を見る
  • ベストアンサー

オーディオサンプルレートの変更

皆様のお力をお貸しください。 【環境】 OS:Windows XP 開発環境:VB6.0 現在WAVファイル(16bit,22KHz)のファイルを 16bit 8KHzに変換するものを上記環境にて作成使用としていますが ネット上を検索しても該当するような情報を検索できませんでしたので質問させていただきます。 以下のような手順にてWAVファイルを再生させることはできましたが サンプルレートの変更を行うことはできませんでした。 Call mciSendString("open " + 変換元ファイル名称 + " alias f", "", 0, 0) Call mciSendString("play f", "", 0, 0) Call mciSendString("set f bitspersample 16", "", 0, 0) Call mciSendString("set f samplespersec 8000", "", 0, 0) Call mciSendString("save f " & 変換後ファイル名称, "", 0, 0) Call mciSendString("close f", "", 0, 0) このような単純なことではなく、もっと複雑な処理を検討しないと ならないものでしょうか。 別な方法にてできるものがありましたら、教えてください。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

>このような単純なことではなく、もっと複雑な処理を検討しないと >ならないものでしょうか。 ビットレート変換を行うには「再サンプリング」が必要です。 単純に行う場合は「22050:8000」つまり「22050個のデータから等間隔に8000個を取り出す」と言う「間引き」で行うしかありませんが、音質が著しく劣化し、しかも、音が激しく歪みます。 音質を下げずに変換する場合は、22050個のデータの隙間を補完し、22050と8000の公倍数である1764000個のデータに変換し、1764000個のデータから等間隔に8000個を取り出す、と言う事をしなければなりません。 これではデータが増えて大変な事になるので、普通は、3次スプライン変換やフーリエ変換などで「波形を予測して、特定の位置の波形データを補完する」などの方法を取ります。 >別な方法にてできるものがありましたら、教えてください。 http://www.vector.co.jp/soft/x68/art/se031966.html などのフリーソフトを使用して下さい。 蛇足ですが。 >現在WAVファイル(16bit,22KHz) 通常、WAVファイルで「22KHz」と言うと「22.05KHz」の事です。 なぜかと言うと、これは「音楽CDの44.1KHzの半分」だからです。 このように「半分」の場合は「2個のデータを1つおきに間引くだけ」で簡単に変換出来てしまうので「半分」「1/4」などにするのです。 因みに 44.1KHz=44100Hz 22KHz=22050Hz 11KHz=11025Hz 5.5KHz=5512Hz(0.5Hzの誤差が出るので余り使われない) です。

masato01
質問者

お礼

chie65536様 早速の回答ありがとうございました。 いろいろと勉強しなければいけないことがあり参考になりました。 フリーのツールを使用すれば、変換できることはHPを検索している中で わかってはいましたが、なんとかVBのソース上で実現できる方法がないかと 探しておりました。 また、何か情報がありましたら書き込みをお願いいたします。

関連するQ&A

  • オーディオサンプルレートを変更したら・・・。

    はじめまして。 wavファイルのオーディオサンプルレートをSampling Rate Converterを使い、22.05KHzから44.1KHzに変更しました。 22.05KHzの時までは音質は良好だったのですが。44.1KHzに変換した途端、ジジジというような雑音がたくさん入ってきてしまいました。 なぜサンプルレートを上げただけで雑音が入ってきてしまうのでしょうか? 原因、対処方法、サンプルレートを上げても雑音が入ってこないソフト等、情報がありましたら教えていただけないでしょうか。 ちなみに変換したファイルはビットレート352kbps、オーディオサンプルサイズ16ビットです。 どなたかよろしくお願いします。

  • windows API  「mciSendString」 の連続再生について

    VISUAL BASIC 6.0 で音楽再生ソフトを作ろうとしました。 windows API の「mciSendString」を使って、 例1のようにすると b.wav の音楽しか再生されません。 そこで、例2のようにすると、a.wav と b.wav が再生されましたが、 曲の途中では、"pause" と "resume" の命令が効きません。 連続再生ができて、曲の途中でも "pause" や "resume" の命令が効く方法を知りたいのですが、ご指導をお願いします。 <例1> Call mciSendString("open c:\a.wav ", "", 0, 0) Call mciSendString("play c:\a.wav ", "", 0, 0) Call mciSendString("close c:\a.wav ", "", 0, 0) Call mciSendString("open c:\b.wav ", "", 0, 0) Call mciSendString("play c:\b.wav ", "", 0, 0) Call mciSendString("close c:\b.wav ", "", 0, 0) <例2> Call mciSendString("open c:\a.wav ", "", 0, 0) Call mciSendString("play c:\a.wav wait ", "", 0, 0) Call mciSendString("close c:\a.wav ", "", 0, 0) Call mciSendString("open c:\b.wav ", "", 0, 0) Call mciSendString("play c:\b.wav wait ", "", 0, 0) Call mciSendString("close c:\b.wav ", "", 0, 0)

  • オーディオサンプルレートを変換するフリーツール

    いつもお世話になってます。 ネットウォークマンを買って来たのですが、 MP3ファイルを早速聞いてみようと思って本体に転送したまでは良かったのですが、 「CannotPlay」と表示されてしまいました。 調べてみると、どうやらオーディオサンプルレートが 44.1kHzでないと再生してくれないようです。 MP3ファイルのプロパティの詳細を参照すると、 オーディオサンプルレートが22kHzでした。 そこで、このMP3ファイルをWAVに変換したまではできたのですが、オーディオサンプルレートを変換する ツールが見つかりません。 どなたか、おすすめのフリーツールがありましたら、 お教え願えないでしょうか? 何卒よろしくお願い致します。

  • オーディオファイル変換ソフト(Win)

    オーディオファイルのフォーマットを調べるフリーソフトを教えてください。(AIFF、24bit、48khzみたいに。)またあわせて違う形式に変換できるとよりOKです。(WAV、16bit、44.1khzなどに)

  • API 録音 MCI

    C#を勉強しております。 現在マイクから録音音声を読み取りファイルとして保存するプログラムを組んでいます。 [DllImport("winmm.dll")] extern static int mciSendString(string s1, StringBuilder s2, int i1, int i2); strSetup = "channels 2 samplespersec 44100 bytespersec 176400 alignment 4 bitspersample 16"; private void button1_Click(object sender, EventArgs e) { mciSendString("open new type waveaudio alias Rec", null, 0, 0); mciSendString("set Rec " + strSetup, null, 0, 0); mciSendString("record Rec", null, 0, 0); } string strFilename = "C:\\test.wav"; private void button2_Click(object sender, EventArgs e) { mciSendString("stop Rec", null, 0, 0); mciSendString("save Rec " + strFilename, null, 0, 0); mciSendString("close Rec", null, 0, 0); } とこんな感じにしてみたのですがファイルができる気配がありません。 どこがまずいのでしょうか?

  • 8kHz、8bitのwavに変換したい。

    Audacity Ver2.0.0 で8kHz,8bitのwavファイルを作成しようとしたのですが、ビットは16bitまでしか落とせないようで困っています。 44.1kHz 32bitのwavファイルを8kHz,8bitに変換する方法はAudacityにはあるのでしょうか? ご存じの方いらっしゃいましたら、ご教授よろしくお願いします。

  • 複数のwavファイルを16bitから8bitにしたい

    複数のwavファイルを44kHz16bitから44kHz8bitに変換したいのですが なにか良いフリーソフトはありますか?

  • 音源をmp3にした時のサンプルサイズについて

    24bitのWAV音源を44.100kHzのmp3に変換したのですが mp3に変換するとサンプルサイズが何bitになっているか確認できず困っています どんな音源でも44.100kHzのmp3に変換すれば16bitになるのでしょうか 変な質問ですみません

  • midi再生について

    visual basicを使ってゲームを作成しております。 あるサイトを見てmidiの再生をやってみようと下記のコードを入力しました。 Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _ (ByVal lpstrCommand As String, _ ByVal lpstrReturnString As String, _ ByVal uReturnLength As Long, _ ByVal hwndCallback As Long) As Long Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMillsecounds As Long) Sub MCI_Test() Dim P As String, filename As String filename = "sample.mid" P = """" & ActiveWorkbook.Path & "\" & filename & """" Call mciSendString("open " & P & " alias sample", vbNullString, 0, 0) DoEvents Call mciSendString("play sample from 0", vbNullString, 0, 0) Call Sleep(10000) Call mciSendString("close sample", vbNullString, 0, 0) End Sub このコードでfilenameの部分を変更しwavファイルのsample.wavやMP3ファイルのsample.mp3は再生する事ができました。しかし、midiファイルはsample.midを同じフォルダ内に入れているにも関わらず全く音が鳴りません。どこが間違っているのでしょうか。教えてください。宜しくお願い致します。

  • MTRへの録音レートについて。

    これから機材を購入しレコーディングをするのですが、ギターやベースを録る際、44.1khzと48khzでの音質の差はどれくらいありますか? また44.1khzのWAVファイルを、ソフト上で48khzに変換した場合、音質は劣化したりするのでしょうか? 実は、レコスタにデータファイルを渡すのですが、 条件が24ビット 48khzで と言うことでして、 今検討しているMTRは44.1khzのみなのです。 ただUSB2にてPCにWAVを送れるので、後に48khzに変換することで解決出来ればと。 もしくは、その上の機種を購入し、初めから48khzで録音し、オーディオインターフェイスでPCに取り込んでから、WAVにすることも考えているのですが、予算がかなり掛かるので、ちょっと悩んでいます。。 アドバイスの程、宜しくお願い致します。  

専門家に質問してみよう