c - 在两个 channel 上播放单声道 WAV

标签 c audio wav

我创建了一个随机的单声道 WAV,但是当我播放它时,我可以通过两个声道(左和右)听到音频。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

struct wav{
    char ChunkID[4];
    unsigned int ChunkSize;
    char Format[4];
    char Subchunk1ID[4];
    unsigned int Subchunk1Size;
    unsigned short int AudioFormat;
    unsigned short int NumChannels;
    unsigned int SampleRate;
    unsigned int ByteRate;
    unsigned short int BlockAlign;
    unsigned short int BitsPerSample;
    char SubChunk2ID[4];
    unsigned int Subchunk2Size;
};

int main(){

    struct wav wavHdr;
    FILE *fp;

    fp = fopen("MonoSound.wav", "wb");

    strcpy(wavHdr.ChunkID, "RIFF");
    strcpy(wavHdr.Format, "WAVE");
    strcpy(wavHdr.Subchunk1ID, "fmt ");
    wavHdr.Subchunk1Size = 16;
    wavHdr.AudioFormat = 1;
    wavHdr.NumChannels = 1;
    wavHdr.SampleRate = 220505;
    wavHdr.ByteRate = 441010;   //(SampleRate*NumChannels*BitsPerSample/8)
    wavHdr.BlockAlign = 2;     //(NumChannels*BitsPerSample/8)
    wavHdr.BitsPerSample = 16;
    strcpy(wavHdr.SubChunk2ID, "data");
    /* multiplied by 5 because there's 5 seconds of audio */
    wavHdr.Subchunk2Size = (5 * wavHdr.ByteRate);
    wavHdr.ChunkSize = (wavHdr.Subchunk2Size + 36);

    fwrite(&wavHdr, 44, 1, fp);

    int i, randVal;
    unsigned int audio;
    float freq = 50.0;
    int amp = 32600;
    float w;

    srand(time(NULL));

    for(i = 0; i < (5 * wavHdr.SampleRate); i++){
        randVal = (rand() % 1) + 1;
        amp += randVal;
        w = 2.0 * 3.141592 * freq;
        audio = amp * sin(w * i / 220505.0);
        fwrite(&audio, 2, 1, fp);
    }

    return 0;
}

我做错了什么?音频只能通过其中一个扬声器输出。预先感谢您的帮助。

最佳答案

"The audio should only come out through one of the speakers"

不是真的。当你有单声道文件时,即你在录制音频时有一个麦克风,你将在两个输出 channel 上获得相同的数据。如果你只想听到一个 channel 的音频,制作 2 个 channel 的 wav,其中一个 channel 全为零

关于c - 在两个 channel 上播放单声道 WAV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29763311/

相关文章:

c - 如何防止 gdb 在磁盘已满的机器上启动缓慢

javascript - 需要一个 javascript/HTML 5 网络播放器,可以使用 WAV 容器中的 G.711 编解码器播放音频

php - PHP mp3流在连接点出现问题

audio - 加密后测量音频文件.WAV的质量我的项目语言是VB.net

c# - 如果路径不是C:/Windows/Media,则无法播放声音

html - iPhone上的音频标签

r - 从一个大型(350 mb).wav制成的S4对象中输出许多.wav,这些内容分为5秒

c - 多个 "\a"不起作用

c - 使用俯仰和横滚值的倾斜传感器的图形设计

c - 在VC++中使用OpenSSL时具体如何配置?