Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: lame + php - конвертация аудио
Форумы портала PHP.SU » » Вопросы новичков » lame + php - конвертация аудио

Страниц (2): [1] 2 »
 

1. maragon - 31 Мая, 2015 - 22:24:03 - перейти к сообщению
Появилось желание конвертировать mp3 в wav на хостинге.
Использую lame.

PHP:
скопировать код в буфер обмена
  1. if(exec("/var/www/maragonov/data/www/test.ru/lame /var/www/maragonov/data/www/test.ru/overdrive.mp3 -f -m m -b 16 --resample 8 /var/www/maragonov/data/www/test.ru/overdrive2.mp3 && /var/www/maragonov/data/www/test.ru/lame --decode /var/www/maragonov/data/www/test.ru/overdrive2.mp3 /var/www/maragonov/data/www/test.ru/overdrive2.wav")){
  2.    echo 1;
  3. } else {
  4.    echo 0;
  5. }


Выводит мне 0 постоянно.
P.S - Функция exec() не отключена в настройках хостинга
2. LIME - 31 Мая, 2015 - 22:27:13 - перейти к сообщению
А lame чтото выводит вообще?
В system есть переменная статуса выполнения
Попробуй
3. DeepVarvar - 31 Мая, 2015 - 22:28:12 - перейти к сообщению
И зачем ты вообще расконвертиваешь? Будешь что-то микшировать?
4. maragon - 31 Мая, 2015 - 22:30:07 - перейти к сообщению
DeepVarvar пишет:
И зачем ты вообще расконвертиваешь? Будешь что-то микшировать?

График аудио вытащить хочу из wav (wav в png изображение).
Первое на что наткнулся - была библиотека lame.
5. DeepVarvar - 31 Мая, 2015 - 22:32:31 - перейти к сообщению
CODE (sh):
скопировать код в буфер обмена
  1. #!/bin/sh
  2. find . -name '*.mp3' -exec sh -c 'ffmpeg -i "$0" -ac 1 -ar 4000 -f s16le -acodec pcm_s16le - | gnuplot ./gplt | dd of="$0".png' {} \;

CODE (gplt):
скопировать код в буфер обмена
  1. set terminal png transparent truecolor size 600,60;
  2. set output;
  3.  
  4.   unset key;
  5.   unset tics;
  6.   unset border;
  7.   set lmargin 0;
  8.   set rmargin 0;
  9.   set tmargin 0;
  10.   set bmargin 0;
  11.  
  12.   plot '<cat' binary filetype=bin format='%int16' endian=little array=1:0 with lines;
6. dcc0 - 01 Июня, 2015 - 00:27:08 - перейти к сообщению
А обратно преобразовать картинку в звук?! = )
7. DeepVarvar - 01 Июня, 2015 - 01:18:27 - перейти к сообщению
Это не сложно.
Читаем её в двумерный массив-матрицу и двигаясь слева направо смотрим (пропорционально) величины положительных и отрицательных полуволн, где базовое значение (тишина) будет равно нулю, а мин и макс это -32768 и 32767 соответственно (для 16 бит знаковых).
Открываем пустой файл и пишем туда 44 байта нулей в начало (для заголовка о котором ниже).
Дальше пишем те значения по очереди полученные из массива.
В нашем примере важно чтобы было в Little Endian.
Когда дописали эти фреймы, смотрим сколько там мы их насчитали.
Мы же их считали, да?
Сикаем файл в начало и пишем в те 44 байта вот такую хрень (см. табличку): http://www[dot]topherlee[dot]com/softwar[dot][dot][dot]t-wavformat[dot]html

Вуаля -- можно запускать с плеера.
8. dcc0 - 01 Июня, 2015 - 08:44:47 - перейти к сообщению
Вуаля -- можно запускать с плеера.
А если не считывать за раз всю картинку, а сделать буферизацию, то получаем экономию пространства ?
9. LIME - 01 Июня, 2015 - 12:18:57 - перейти к сообщению
Получаем
Если у нас заголовок уже есть
А его у нас нет
Учись просто слушать картинки
Оочень разгружает сервак
10. dcc0 - 01 Июня, 2015 - 13:02:33 - перейти к сообщению
LIME, DeepVarvar, спасибо, нажал в карму.
Я подозревал...
11. DeepVarvar - 01 Июня, 2015 - 14:29:53 - перейти к сообщению
dcc0 пишет:
А если не считывать за раз всю картинку
С картинками не все так радужно. Во первых разные форматы, во вторых сжатие, в третьих следование пикселей не всегда по порядку, может быть черезстрочное, а может и перевернутый порядок. Так что распаковывать полностью и составлять "карту" звуковой волны всеравно придется.
(Добавление)
LIME пишет:
Если у нас заголовок уже есть
У нас его нет, т.к. бывают и сырые RAW-PCM фреймы, собсно их то и отдает ффмпег в том примере на анализ гнуплоту. Вобщем не каждый плеер будет играть RAW-PCM ибо в заголовке указаны данные для воспроизведения: длительность, частота, битность, кол-во каналов.
12. dcc0 - 01 Июня, 2015 - 14:34:36 - перейти к сообщению
А если делить график по кускам? Пока проигрывается первый кусок преобразуется второй и т.д.
13. DeepVarvar - 01 Июня, 2015 - 15:33:00 - перейти к сообщению
По каким кускам? Пиксели в картинке не последовательно же могут итти. Их надо распарсить в последовательный вид, а потом еще и вычислить вершины волны в конкретный момент времени.
14. maragon - 02 Июня, 2015 - 00:40:01 - перейти к сообщению
Разрабрался! Закатив глазки
15. dcc0 - 02 Июня, 2015 - 12:21:00 - перейти к сообщению
DeepVarvar, про куски - я не очень понял про
Цитата:
распаковывать полностью

Т.е., например, нельзя взять график - картинку и порезать на несколько частей и как-нибудь распараллеливать процесс ?
Или мы получим значительное искажение в местах обрыва?

 

Powered by ExBB FM 1.0 RC1