- Звук на C,
ACCA, 03:24 , 11-Май-11 (1)> А может, вообще, можно так перекодировать WAV, чтоб заиграло через > fwrite(Wave, sizeof(Wave), sizeof(Wave), "/dev/dsp"); Там не WAV кодировать нужно, а дрочить /dev/dsp через ioctl: http://www.oreilly.de/catalog/multilinux/excerpt/ch14-05.htm Вариантов попроще видится два - system (2) и далее по вкусу mpg321 и проч., либо пищать через \a через некоторые termio/termcap. Пробовал второй - терпимо.
- Звук на C,
pavlinux, 04:02 , 11-Май-11 (2)
- Звук на C,
pavlinux, 04:09 , 11-Май-11 (3)>[оверквотинг удален]ТЛЯЯЯЯЯЯЯЯ ЗАРАБОТАЛО, СЛАВА МНЕ !!!!
- Звук на C,
pavlinux, 02:59 , 12-Май-11 (4)Вот код, но обнаружился косяк - щелкает перед проигрыванием. #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ioctl.h> #include <stdlib.h> #include <stdio.h> #include <linux/soundcard.h>#include "sound.h" int main(void) { int fd, arg, status, fmt, sz, div; fd = open("/dev/dsp", O_RDWR); ioctl(fd, SOUND_PCM_RESET, 0); arg = SIZE; ioctl(fd, SOUND_PCM_WRITE_BITS, &arg); arg = CHANNELS; ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg); arg = RATE; ioctl(fd, SOUND_PCM_WRITE_RATE, &arg); fmt = AFMT_U16_BE; ioctl(fd, SOUND_PCM_SETFMT, &fmt); printf("Play:\n"); sz = sizeof(Wave); div = 4; ioctl(fd, SOUND_PCM_SUBDIVIDE, &div); write(fd, Wave, sz); ioctl(fd, SOUND_PCM_SYNC, 0); close(fd); return (0); }
"sound.h" - тут - http://pavlinux.ru/sound.h
- Звук на C,
ACCA, 13:52 , 12-Май-11 (5)В самом сэмпле смикшируй атаку и затухание. Затухание там нормальное, поэтому ты слышишь один щелчок, а не два.
- Звук на C,
pavlinux, 14:11 , 12-Май-11 (6)> В самом сэмпле смикшируй атаку и затухание. Затухание там нормальное, поэтому ты > слышишь один щелчок, а не два.Ну вот если только... Вечером попробую.
- Звук на C,
pavlinux, 17:50 , 12-Май-11 (7)> В самом сэмпле смикшируй атаку и затухание. Затухание там нормальное, поэтому ты > слышишь один щелчок, а не два.Кстати, чем нынче модно WAV редактировать?
- Звук на C,
pavlinux, 18:03 , 12-Май-11 (8)> В самом сэмпле смикшируй атаку и затухание. Затухание там нормальное, поэтому ты > слышишь один щелчок, а не два.Хошь прикол?! Я же когда WAV перегонял в HEX, заголовок WAV не удалил То есть, там, в массиве, первые 44 байта надо выкинуть. :) http://pavlinux.ru/sound.h ну и чуток поправил код, выкинул переменные не нужные. #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ioctl.h> #include <stdlib.h> #include <stdio.h> #include <linux/soundcard.h>#include "sound.h" int main(void) { ssize_t arg; int fd; fd = open("/dev/dsp", O_RDWR); arg = 0; ioctl(fd, SOUND_PCM_SYNC, &arg); arg = RATE; ioctl(fd, SOUND_PCM_WRITE_RATE, &arg); arg = SIZE; ioctl(fd, SOUND_PCM_WRITE_BITS, &arg); arg = CHANNELS; ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg); arg = AFMT_U16_BE; ioctl(fd, SOUND_PCM_SETFMT, &arg); arg = 4; ioctl(fd, SOUND_PCM_SUBDIVIDE, &arg); arg = (ssize_t)sizeof(Wave); write(fd, Wave, arg); ioctl(fd, SOUND_PCM_SYNC, NULL); ioctl(fd, SOUND_PCM_RESET, NULL); close(fd); return 0; }
- Звук на C,
NuINu, 18:20 , 12-Май-11 (9)> Понадобилось впиндюрить пикалку в программку на чистом С (ну может С99), > ну типа как у Аськи "а-аа", и очень не хочется приклеивать внешнюю > библиотеку. > В идеале, есть ли возможность воспроизвести WAV (только не MIDI), > перекодированный в HEX значения в виде массива int Wave[] = {...};, > и засланный в /dev/audio > А может, вообще, можно так перекодировать WAV, чтоб заиграло через > fwrite(Wave, sizeof(Wave), sizeof(Wave), "/dev/dsp"); > ???можно к примеру так sox test1.wav --comment "" -e u-law test1.au dd bs=2k if=test1.au of=/dev/audio или cat test1.wav >/dev/audio ну и там всякую фигню добавить со сжатием, а то файлы большие получаются ну а записывать через дсп sox -r 48000 -t ossdsp -w -s /dev/dsp -r 48000 sound1.wav
- Звук на C,
pavlinux, 18:24 , 12-Май-11 (10)>[оверквотинг удален] >> перекодированный в HEX значения в виде массива int Wave[] = {...};, >> и засланный в /dev/audio >> А может, вообще, можно так перекодировать WAV, чтоб заиграло через >> fwrite(Wave, sizeof(Wave), sizeof(Wave), "/dev/dsp"); >> ??? > можно к примеру так > sox test1.wav --comment "" -e u-law test1.au > dd bs=2k if=test1.au of=/dev/audio > или > cat test1.wav >/dev/audio Кстати, это я знаю, старая фишка, но пробовал и не заработало. > ну и там всякую фигню добавить со сжатием, а то файлы большие получаются > ну а записывать через дсп > sox -r 48000 -t ossdsp -w -s /dev/dsp -r 48000 sound1.wav Ну да... Спасибо, вроде разобрался. Примеры, из сообщений выше, работают как надо!
|