Перезапись пары альтернативных байтов в C ++ - PullRequest
0 голосов
/ 09 марта 2011

Я пытаюсь воспроизвести звук с одной стороны динамика, перезаписав пару альтернативных байтов (2 байта) нулями.Я проверил в редакторе HEX, и пары альтернативных байтов имеют повторение.

Я сделал небольшую программу, чтобы сделать то же самое.Тем не менее, это не работает.Можете ли вы указать, что я делаю здесь не так?

int main()
{
    FILE *file, *fileWrite;
    unsigned char *buffer;
    unsigned long fileLen;
    int n;

    file = fopen("sound.dat", "rb");
    fileWrite = fopen("sound1.dat", "w+");

    // Get the File Length
    //Get file length
    fseek(file, 0, SEEK_END);
    fileLen=ftell(file);
    fseek(file, 0, SEEK_SET);

    buffer = (unsigned char *)malloc(fileLen+1);
    n = fread(buffer, fileLen, 1, file);
    printf("%s\n", &buffer);

    int i;

    for(i = 0 ;i < fileLen; i = i + 4)
    {
          buffer[i+2] = '\0';
          buffer[i+3] = '\0';
          // printf("%.2X %.2X %.2X %.2X  \n", (int)buffer[i],(int)buffer[i+1],    (int)buffer[i+2],(int)buffer[i+3]);

    } 

    n = fwrite(buffer, fileLen, 1, fileWrite);

    fclose(file);
    fclose(fileWrite);
}

ОБНОВЛЕНИЕ: если шестнадцатеричное значение

4F D0 4F D0 FF 05 FF 05

я хочу сделать это

4F D0 00 00 FF 05 00 00

решено !!!

Может кто-нибудь помочь мне сthis: Audio File: Воспроизведение данных только через один динамик?

1 Ответ

1 голос
/ 09 марта 2011

Ваш цикл отключен несколькими:

for(i = 0 ;i < fileLen; i = i + 4)

Должно быть

for(i = 0 ;i < fileLen - 3; i = i + 4)

В противном случае присвоение buffer[i + 3] перезапишет что-то в памяти после конца буфера. Устраняет ли это проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...