- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:waveファイルの8bitデータの調整)
8bitデータの調整方法
このQ&Aのポイント
- VS2003.NET/C++でプログラミングをしている場合、8bitのwaveファイルで音声データを取得し、フェードを掛けようとする際、16bitとは異なり、1byteに左チャネル、2byte目に右チャンネルが格納されているため、音量調整が上手くいかない。
- 16bitデータの場合、2byteずつ確保し、音量調整を行うが、8bitデータの場合は、4byteずつ確保し、音量調整を行う必要がある。
- 8bitデータの音量調整方法は、まず1byte目から128を引いてから、音量調整倍率をかけ、さらに128を足す。その後、加工済みデータを保存する。
- みんなの回答 (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; }
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
n1 * (int)(bMeter / 100.0); n2 * (int)(bMeter / 100.0); のあたり, 何をしたいの?
質問者
お礼
>この処理をやっても音量がちっとも変わらないんです。 >値が0になれば無音だと思っていたんですが .値が0になると無音ではないようです。 無音は128でした。
質問者
補足
n1 * (int)(bMeter / 100) or n2* (int)(bMeter / 100)は 100分割にして音量を下げています。 (int)は間違いでした。 すいません。 (int) → (char)です。 この処理をやっても音量がちっとも変わらないんです。 値が0になれば無音だと思っていたんですが
お礼
回答ありがとうございます。 上記の通りにやったら上手くいきました。 キャストを上手くやったらフェード可能になりました。 ありがとうございます。