• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:waveファイルの8bitデータの調整)

8bitデータの調整方法

このQ&Aのポイント
  • VS2003.NET/C++でプログラミングをしている場合、8bitのwaveファイルで音声データを取得し、フェードを掛けようとする際、16bitとは異なり、1byteに左チャネル、2byte目に右チャンネルが格納されているため、音量調整が上手くいかない。
  • 16bitデータの場合、2byteずつ確保し、音量調整を行うが、8bitデータの場合は、4byteずつ確保し、音量調整を行う必要がある。
  • 8bitデータの音量調整方法は、まず1byte目から128を引いてから、音量調整倍率をかけ、さらに128を足す。その後、加工済みデータを保存する。

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

2つずつまわさなくても単純なループでいいと思います for( int i = 0; i < nSize; i++ ) { char n1 = (char)( lpData1[ i ] ); n1 -= 128; n1 = n1 * (bMeter / 100.0); /* 計算結果はちゃんと代入しましょう */ n1 += 128; lpData2[ i ] = n1; } 16ビットのほうもshortにキャストしてやればもっとシンプルになりますよ for( int i = 0; i < nSize/2; i++ ) { short n1 = *((short*)lpData1 + i); n1 = n1 * (bMeter / 100.0); *((short*)lpData2 + i) = n1; }

DEADSPACE566
質問者

お礼

 回答ありがとうございます。 上記の通りにやったら上手くいきました。 キャストを上手くやったらフェード可能になりました。 ありがとうございます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

n1 * (int)(bMeter / 100.0); n2 * (int)(bMeter / 100.0); のあたり, 何をしたいの?

DEADSPACE566
質問者

お礼

>この処理をやっても音量がちっとも変わらないんです。 >値が0になれば無音だと思っていたんですが .値が0になると無音ではないようです。 無音は128でした。

DEADSPACE566
質問者

補足

n1 * (int)(bMeter / 100) or n2* (int)(bMeter / 100)は 100分割にして音量を下げています。 (int)は間違いでした。 すいません。 (int) → (char)です。 この処理をやっても音量がちっとも変わらないんです。 値が0になれば無音だと思っていたんですが

関連するQ&A