如何从文本文件创建一个wav文件?

时间:2011-11-19 10:59:52

标签: wav carrierwave text-files duration

我有一个文本文件,它存储wav文件的频率和部分持续时间,例如:

44100hz 150 010 150 015 133 ...

这些信息描述了wavfile将创建44100hz的频率,50ms的音量100,10ms的音量0,50ms的音量100,15ms的音量0和33ms的音量100 ...我不知道如何设置我写wav文件时的持续时间。 “数据阵列”中的元素是否存储(1 /频率)秒的幅度?你能救我吗?

p / s:我很抱歉我的英语,我正在用C#代码。

1 个答案:

答案 0 :(得分:0)

我不了解自己,但Garrett Hoofman创建了a wrapper for creating WAV files in C#

通过获取数据,您应该可以使用MSDN上的Generating Sound Waves with C# Wave Oscillators来实际创建文件中的数据。

以下是Garret的WaveLibrary库中的WAV文件规范。

 * Wave File Library
 * A simple library to write a wave file
 * 
 * Garrett Hoofman
 * 10/21/08
 * http://www.visionsofafar.com
 * */

/* Wave File Format
Reference : http://ccrma.stanford.edu/CCRMA/Courses/422/projects/WaveFormat/
The canonical WAVE format starts with the RIFF header:
0         4   ChunkID          Contains the letters "RIFF" in ASCII form
                               (0x52494646 big-endian form).
4         4   ChunkSize        36 + SubChunk2Size, or more precisely:
                               4 + (8 + SubChunk1Size) + (8 + SubChunk2Size)
                               This is the size of the rest of the chunk 
                               following this number.  This is the size of the 
                               entire file in bytes minus 8 bytes for the
                               two fields not included in this count:
                               ChunkID and ChunkSize.
8         4   Format           Contains the letters "WAVE"
                               (0x57415645 big-endian form).

The "WAVE" format consists of two subchunks: "fmt " and "data":
The "fmt " subchunk describes the sound data's format:
12        4   Subchunk1ID      Contains the letters "fmt "
                               (0x666d7420 big-endian form).
16        4   Subchunk1Size    16 for PCM.  This is the size of the
                               rest of the Subchunk which follows this number.
20        2   AudioFormat      PCM = 1 (i.e. Linear quantization)
                               Values other than 1 indicate some 
                               form of compression.
22        2   NumChannels      Mono = 1, Stereo = 2, etc.
24        4   SampleRate       8000, 44100, etc.
28        4   ByteRate         == SampleRate * NumChannels * BitsPerSample/8
32        2   BlockAlign       == NumChannels * BitsPerSample/8
                               The number of bytes for one sample including
                               all channels. I wonder what happens when
                               this number isn't an integer?
34        2   BitsPerSample    8 bits = 8, 16 bits = 16, etc.
          2   ExtraParamSize   if PCM, then doesn't exist
          X   ExtraParams      space for extra parameters

The "data" subchunk contains the size of the data and the actual sound:
36        4   Subchunk2ID      Contains the letters "data"
                               (0x64617461 big-endian form).
40        4   Subchunk2Size    == NumSamples * NumChannels * BitsPerSample/8
                               This is the number of bytes in the data.
                               You can also think of this as the size
                               of the read of the subchunk following this 
                               number.
44        *   Data             The actual sound data.
*/