获取音频样本值
Posted
技术标签:
【中文标题】获取音频样本值【英文标题】:Get audio sample value 【发布时间】:2019-01-26 17:46:08 【问题描述】:如何在 C# 中打印和修改音频样本值?
byte[] array = File.ReadAllBytes("C:\\audioclip.wav");
for (int i = 44; i < array.Length - 1; i++)
Console.WriteLine(" byte " + i + " value " + array[i]);
System.Threading.Thread.Sleep(100);
对吗?
【问题讨论】:
你想完成什么?为什么你的循环从 44 开始? 我尝试执行音频隐写术(隐藏音频样本中的文本),我的循环从 44 开始,因为(wav)音频文件实际数据(样本)从它开始(44)。 你的 for 条件不需要负 1。i < array.Length
- 是文件的结尾。 (因为你做的低于)。 - 我不明白到底是什么问题?
好的,还有其他代码可以吗?
你试过wavestream吗?
【参考方案1】:
.wav
文件可能被压缩,如果是这样,样本值将不会存储为简单字节。您需要使用库(如 cmets 中所述)。
如果您的文件未压缩,那么您几乎是正确的。未压缩的.wav
文件包含 16 位样本,而不是 8 位。所以ReadAllBytes
不是很有帮助。
改为使用BinaryReader
和reader.ReadInt16()
来读取每个样本,例如。
List<Int16> sampleBuffer = new List<Int16>();
using(var inputStream = File.Open(inputFile))
using (var reader = new BinaryReader(inputStream))
while (inputStream.Position < inputStream.Length)
sampleBuffer.Add(reader.ReadInt16());
【讨论】:
谢谢,但是为什么当我打印列表(sampleBuffer)值的结果时,结果的开头有一个负数。 @Yas 我相信这是正确的,请参阅***.com/questions/5890499/pcm-audio-amplitude-values以上是关于获取音频样本值的主要内容,如果未能解决你的问题,请参考以下文章