2010-11-25 5 views
2

ただ単純なWAVプレーヤーを作りたいです。 ここにMyCodeがあります。私の10ラインオーディオプレーヤー

#include <stdio.h> 

int main(){ 
    FILE* speaker = fopen("/dev/audio", "wb"); 
    FILE* music = fopen("bugsbunny2.wav", "rb"); 
    char data[16]; 
    while(!feof(music)){ 
     fread(data, sizeof(char), sizeof(data), music); 
     fwrite(data, sizeof(char), sizeof(data), speaker); 
    } 
    return 0; 
} 

これは音があまりにも騒々しいです。理解しづらい。 バッファ/チャンクサイズが不足していると思います 実際のチャンクサイズとは何ですか? または実際のチャンクサイズを取得するにはどうすればよいですか?

+0

* what *チャンクのサイズ? 4バイトはポインタのサイズ、すなわちsizeof(data)である。私は512バイト以下のクラスターサイズのシステムを見かけることはないと言いたいので、少なくともそのサイズのバッファーを作りましょう。 – TheBlastOne

+0

wavの3バイトまでは間違っています...考えてみてください...読み込みバッファのサイズを大幅に増やし、最初にそのバグを修正しないと、かなり多くのバイトが失われ、バグバニーは最終的にはバグのように聞こえます:) – TheBlastOne

+0

最も単純なWAVプレーヤーは、おそらくWindowsまたはWindowsシェルが提供するAPI関数である "このファイル名のwavを再生する"かもしれません。 – TheBlastOne

答えて

0

ローカルdataには割り当てられたストレージはありませんが、コードは読み書きしています。サイズに基づいて、ループの各繰り返しで16バイトの記憶領域を読み書きしようとしているように見えますが、私はところで、おそらく、これはの源である[あなたがすべきwavファイルのいくつかの基本的な構文解析を行う(プラス、必要に応じて、ビッグエンディアンにリトルエンディアンからバイトを変換することを、考える代わりに、次の

char data[16]; 
while(!feof(music)){ 
    fread(data, sizeof(char), sizeof(data), music); 
    fwrite(data, sizeof(char), sizeof(data), speaker); 
} 
+0

ええ、私は同じことをやった。しかし、それはまだ同じ –

+0

@ user256007同じ何ですか? – JaredPar

+0

同じ騒音。 –

2

を使用しますあなたが興味を持っていない部分をスキップすることができます。これは、ファイル内のサンプルのサイズがわからなくても(たとえば、テストwavファイルの1つで、 、サンプルサイズは24バイトです)。

WAV file specificationをお読みになることをお勧めします。

+0

ああ私もそう思う。私は現在、仕様を読んでいます。しかし、それは複雑すぎるようです。私はWAVが簡単すぎると思った。 –

+0

いいえ、それは比較的簡単です:データ部分の開始位置と1サンプルにどれくらいのバイトが費やされたかを知る必要があります。もちろん、サンプルをLEからBEに変換する必要があります。 –

+0

しかし、ヘッダーパートをスキップしなくても、オーディオ全体の問題ではありません。それはちょうど最初の数マイクロ秒の間雑音を作るでしょう。しかし残りはOKであるべきです。私はLEto BE変換もやっています。今私は騒々しい音とともに長いbeeeeeepを聞く。 –

0

どの程度

#include <stdio.h> 

int main(){ 
    FILE* speaker = fopen("/dev/audio", "wb"); 
    FILE* music = fopen("bugsbunny2.wav", "rb"); 
    char data[16]; 
    while(!feof(music)){ 
     fwrite(data, sizeof(data), 
      fread(data, sizeof(char), sizeof(data), music), 
      speaker); 
    } 
    return 0; 
} 

fread実際に読み取られたバイト数を返します。

しかし、オーディオデバイスにwavファイルを詰め込み、有用なものを聞くことができるかどうかはわかりません。「オーディオ」はWAVコンシューマーではありません。

データ[1024]またはデータ[16384]も使用してください。

関連する問題