На главную страницу | Новости | Ссылки | Контакты
sox
sox infile1 outfile [effect [effect-options]]
play [global-options] [format-options] infile1
rec [global-options] [format-options] outfile
---------------------
Для записи звука с микрофона можно использовать утилиту rec, а проигрывать любой файл можно с помощью play (нужно установить пакет sox).
Пример:
rec 1.wav
play 1.wav
play -v 5 1.wav -увеличить громкость в 5 раз.
При этом бывает полезно в alsamixer'е включить оптию "Mic Boost (+20dB)", а параметр PCM установить на 75% [dB gain=0.00].
----
Для сжатия данных в формате MP3 можно использовать замечательную программу lame (устанавливается отдельно).
Её синтаксис: lame [opt]
Например: lame 1.wav 1.mp3
Её полезные оптии:
--scale n - увеличить звук в n раз (напр.,10)
--decode - декодировать в wav-файл
-m mode, где mode=s,m (-m m -моно режим);
-q qual - качество записи (qual от 0 до 9, 0 - самый медленный, но лучшее возможности), на размер файла не влияет.
-b bitrate - задать kbps (=32,48,64,96 и т.д).
Вот пример скрипта, который упрощает процесс записи. Скрипт имеет один параметр - имя файла, которое вводится без расширения - оно само добавится.
#!/bin/bash
cd /z/rec
rec $1.wav
lame --scale 10 $1.wav $1.mp3
rm $1.wav -f
ls /z/rec -la
mpg123 $1.mp3
Однако и этого мало. Я решил написать альтернативную прогу на Си, чтобы имя файла создавалось автоматически - из текущего времени:
#include
#include
#include
#include
#include
#include
int main(){
time_t time1 = time(NULL);
struct tm *lt = localtime(&time1);
char file[128]="/z/rec/"; // - директория назначения
char filewav[128], filemp3[128];
char cmd[128], str[10];
long res;
struct stat st;
res = stat(file,&st);
if (res!=0) {
printf("Error! No such dir - %s\n",file);
return 1;
}
if ((st.st_mode&S_IFMT)!=S_IFDIR) {
printf("Error! %s is not dir\n",file);
return 1;
}
res = stat("/usr/local/bin/lame",&st);
if (res!=0) {
printf("Error! LAME is not install (No file %s)\n",file);
return 1;
}
sprintf(str,"%d\0",lt->tm_year+1900);
strcat(file,str);
strcat(file,"-");
if (lt->tm_mon <= 8) strcat(file,"0");
sprintf(str,"%d\0",lt->tm_mon+1);
strcat(file,str);
strcat(file,"-");
if (lt->tm_mday <= 9) strcat(file,"0");
sprintf(str,"%d\0",lt->tm_mday);
strcat(file,str);
strcat(file,"_");
if (lt->tm_hour <= 9) strcat(file,"0");
sprintf(str,"%d\0",lt->tm_hour);
strcat(file,str);
strcat(file,"-");
if (lt->tm_min <= 9) strcat(file,"0");
sprintf(str,"%d\0",lt->tm_min);
strcat(file,str);
strcpy(filewav,file);
strcat(filewav,".wav");
strcpy(filemp3,file);
strcat(filemp3,".mp3");
strcpy(cmd,"rec ");
strcat(cmd,filewav);
system(cmd); // - rec
printf("cmd=%s\n",cmd);
strcpy(cmd,"lame --scale 10 ");
strcat(cmd,filewav);
strcat(cmd," ");
strcat(cmd,filemp3);
res = system(cmd); // lame
printf("cmd=%s\n",cmd);
if (res!=0) {
printf("Error! Can not start lame\n");
printf("res=%ld\n",res);
return 1;
}
strcpy(cmd,"rm ");
strcat(cmd,filewav);
strcat(cmd," -f");
system(cmd); // - удаление wav-файла
printf("cmd=%s\n",cmd);
system("ls /z/rec -la");
printf("ls /z/rec -la\n");
strcpy(cmd,"play ");
strcat(cmd,filemp3);
system(cmd); // - проиграть готовый файл
printf("cmd=%s\n",cmd);
printf("END\n");
return 0;
}
---
Недостаток, как видите, не слишком компактный файл как выполнимый, так и исходный текст. Но тем ни мение работает и это уже хорошо.