获取音频样本值

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 &lt; array.Length- 是文件的结尾。 (因为你做的低于)。 - 我不明白到底是什么问题? 好的,还有其他代码可以吗? 你试过wavestream吗? 【参考方案1】:

.wav 文件可能被压缩,如果是这样,样本值将不会存储为简单字节。您需要使用库(如 cmets 中所述)。

如果您的文件未压缩,那么您几乎是正确的。未压缩的.wav 文件包含 16 位样本,而不是 8 位。所以ReadAllBytes 不是很有帮助。

改为使用BinaryReaderreader.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

以上是关于获取音频样本值的主要内容,如果未能解决你的问题,请参考以下文章

NAudio 获取音频样本

iOS 如何从歌曲(ipod 库)中获取音频样本?

如何从音频文件中获取样本的浮点数组

如何使用 NAudio 从 mp3 中获取音频样本数据

在 AVAudioPlayer 中获取音频片段的样本?

使用 AudioToolbox - Swift 从音频信号中获取原始样本流