在Matlab中使用每样本16位(LSB,MSB)将音频信号写入文件

时间:2013-01-22 10:53:09

标签: matlab file-io endianness

你可以用这样的参数来帮助我生成音频信号:

  • 采样率= 8000 Hz,
  • 每个样本16位。

我需要在没有任何标题的情况下将样本写入文件,使用符号(LSB,MSB)进行小端表示。例如。如果样本的值为32767(在此表示中为最大值),则它将保存为0xFF7F。

此信号应包含几个音调。我有这样的代码用于生成音调:

 frequency = 2000;
 duration = 2;
 amplitude = 1;
 sampleFreq = 8000;

t = linspace( 0, duration, duration * sampleFreq );
s = amplitude * sin( 2 * pi * frequency * t ) + amplitude * sin( 2 * pi * frequency/2 * t ) + amplitude * sin( 2 * pi * frequency*2 * t );

它创建了8000 Hz采样率的矢量(单声道)。但我不知道如何使用LSB,MSB约定以16位写入样本。

问候。

1 个答案:

答案 0 :(得分:1)

您可以使用wavewriteaudiowritewavwrite(s,filename)将存储在变量s中的数据写入名为filename的WAVE文件中。 filename输入是用单引号括起来的字符串。数据的采样率为8000 Hz,假定为16位 如果存在字节序问题,您可以使用swapbytes函数将big-endian输出格式化为little-endian(反之亦然),即s = swapbytes(s)

您可以使用following SO answer

删除标题