Ho creato un WAV mono casuale, ma quando suono, posso sentire l'audio attraverso entrambi i canali (a destra &). Ecco il mio codice:Mono WAV su entrambi i canali
#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;
}
Che cosa ho fatto di sbagliato qui? L'audio dovrebbe uscire solo attraverso uno degli altoparlanti. Grazie in anticipo per l'aiuto.
Non sono sicuro, ma mi aspetto che il lettore stia vedendo un file audio mono (1 canale) e riproduca automaticamente su entrambi i canali della scheda audio. (Dopo tutto, come fa a sapere quale singolo diffusore usare?) Penso che quello che vuoi fare sia creare un file wave a 2 canali, ma lasciare i dati per tutti gli zeri di un canale. – DoxyLover