【问题标题】: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吗?

标签: c#


【解决方案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());      
 }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多