Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2013, 16:16   #1
TUberwer
Форумчанин
 
Регистрация: 01.07.2013
Сообщений: 221
По умолчанию Смена формата с .wav на .flac

Всем привет!
У меня такая проблема
Я не знаю как можно изменить формат аудио с .wav в .flac
Это нужно для Google Speech API =)
Может есть уроки какие-то?
Очень нужно
TUberwer вне форума Ответить с цитированием
Старый 04.07.2013, 16:25   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не надо никаких уроков. берете сам flac, устанавливаете, разбираете параметры командной строки для перекодирования из wav -> flac
пишете в своей программе вызов внешнего конвертора, передавая ему нужные параметры (путь\имя wav файла и параметры кодирования).
Получаете перекодированный файл.
Профит!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.07.2013, 16:32   #3
TUberwer
Форумчанин
 
Регистрация: 01.07.2013
Сообщений: 221
По умолчанию

к сожалению я не понял вот этого
Цитата:
разбираете параметры командной строки для перекодирования из wav -> flac
пишете в своей программе вызов внешнего конвертора
TUberwer вне форума Ответить с цитированием
Старый 04.07.2013, 16:48   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

погодите, что именно непонятно?

идёте на офсайт
скачивайте оттуда flac-1.2.1-win.zip
получаете архив, в папке BIN там лежит конвертор:
bin\flac.exe The command-line compressor/decompressor

у себя в программе пишете вызов этого самого flac.exe
через параметер передаёте ему имя_исходного_файла.wav.
получаете имя_исходного_файла.flac
всё.


p.s. предвосхищая вопросы, как запустить внешнюю программу из своей программы на Delphi,
как вариант, можете поискать пример использования CreateProcess

Последний раз редактировалось Serge_Bliznykov; 04.07.2013 в 16:52.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.07.2013, 20:01   #5
TUberwer
Форумчанин
 
Регистрация: 01.07.2013
Сообщений: 221
По умолчанию

Я сделал запуск flac.exe, можешь написать команду для того, чтоб присвоить ему имя через параметр?
TUberwer вне форума Ответить с цитированием
Старый 04.07.2013, 22:20   #6
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Конвертировать. Программа Format Factory или просто аимповский конвертер совершено бесплатны.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 05.07.2013, 08:17   #7
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

недавно занимался этой же задачей (перевод через гугл), использовал New Audio Component, с его помощью записал звук сразу с нужной частотой (по моему требуется 8 кГц, а не 16), можно конвертнуть из другого формата
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 05.07.2013, 08:51   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от TUberwer Посмотреть сообщение
Я сделал запуск flac.exe, можешь написать команду для того, чтоб присвоить ему имя через параметр?
в связи с вновь открывшимися обстоятельствами (появлением на форуме Toxa, который имеет практический опыт решения данной задачи, и информации об использовании New Audio Component) - Вам всё ещё нужен пример использования flac.exe?


UPDATED

впрочем, мне что, сложно пример дать?
ловите:
Код:
program convertWavToFlac;

USES SYSUTILS, Windows;
{$APPTYPE CONSOLE}

procedure ConvertWavAudioFileToFlac( PathToFlac, WavFileName, FlacFileName : string);
var si:TStartupInfo;
    pi:TProcessInformation;
    cmdline:string;

begin
    ZeroMemory(@si,sizeof(si));
    si.cb:=SizeOf(si);
    cmdline := PathToFlac + ' -f "' + WavFileName+'"';
    if  Trim(FlacFileName)<>'' then  cmdline := cmdline + ' -o' + FlacFileName;
    if not CreateProcess( nil, // No module name (use command line).
        PChar(cmdline),  // Command line.
        nil,             // Process handle not inheritable.
        nil,             // Thread handle not inheritable.
        False,           // Set handle inheritance to FALSE.
        0,               // No creation flags.
        nil,             // Use parent's environment block.
        nil,             // Use parent's starting directory.
        si,              // Pointer to STARTUPINFO structure.
        pi )             // Pointer to PROCESS_INFORMATION structure.
       then
        begin
         WriteLn( 'CreateProcess failed. ('+cmdline+')' );
         Exit;
        end;
    WaitForSingleObject( pi.hProcess, INFINITE );
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
end;


// тело самой программы - main()
var PathToFlacEXE : string;
begin
    PathToFlacEXE := ExtractFilePath(ParamStr(0))+'flac.exe';
    if not FileExists(PathToFlacEXE) then 
       WriteLn('#ERROR! Not found flac.exe (put flac.exe in folder '+ParamStr(0))
    else begin
       ConvertWavAudioFileToFlac( PathToFlacEXE, 
           'record\01_theory_of_a_dead_man_-_fahrenheit_soundtrack_-_santa_monica.wav',
           'rezult.flac'  ); 

      WriteLn('Done.');
    end;
end.
примечание. выходное имя файла можно не задавать, тогда flac файл будет создан там же, где лежит исходный wav файл, с тем же именем, что и у исходного файла, только расширение меняется на flac:
т.к. можно вызвать и так:
Код:
ConvertWavAudioFileToFlac( PathToFlacEXE, 
           'D:\TestApp\record\01_theory_of_a_dead_man_-_fahrenheit_soundtrack_-_santa_monica.wav',
           ''  );
но если выходное имя файла задано, то оно или не должно содержать пробелов в имени и пути, либо должно быть взято в двойные кавычки!

Последний раз редактировалось Serge_Bliznykov; 05.07.2013 в 09:25.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.07.2013, 11:26   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

TC, вам всего лишь так:
Код:
dir + 'flac.exe --delete-input-file --channels=1 --sample-rate=8000 audio.wav'
пример же запуска с ожиданием есть, не поверите, в Delphi-World. Потому бегом скачивать этот сборник себе на машину, поменьше на форумах клонированием тем будете заниматься. Что касаемо вашего вопроса по командной строке, то тоже непонятно, что вам мешало заглянуть в описание командной строки FLAC прямо на офсайте? Ничего не мешало, только природная лень.

Цитата:
записал звук сразу с нужной частотой (по моему требуется 8 кГц, а не 16)
не совсем верно. Гугл кушает и 16 кГц спокойно и распознает, просто и в запросе этот битрейт тоже надо поменять. А вот то, что на ноутбучных аудиокартах не всегда поддерживается 16 кГц дискретизация - это факт, потому 8 кГц как компромисс.

Цитата:
в связи с вновь открывшимися обстоятельствами (появлением на форуме Toxa, который имеет практический опыт решения данной задачи, и информации об использовании New Audio Component) - Вам всё ещё нужен пример использования flac.exe?
на этом же форуме есть давняя тема, где захват через DirectSound, путем использования NewAC (а именно DXAudioIn и последующая компрессия FLACOut), не срабатывал у пользователя (но срабатывал у других) и распознавание не шло, как следствие. Исходя из этого было принято решение отказаться от использования DX и осуществлять захват средствами самой системы, чего и другим советую.


http://www.youtube.com/watch?v=aRRvXOOlxmI


http://www.youtube.com/watch?v=eIqKQcD7FEg

См. вложения:
- Псевдо-Google Translate API. Делаем онлайн-переводчик с озвучкой. - Минск, 2012, №5
- Описание API вызова библиотеки GoogleSpeechRecognizeAPI3.DLL
- Описание API вызова библиотеки GoogleTranslateAPI.DLL (онлайн-перевод + озвучка)
- Голосовой плагин для AIMP
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 05.07.2013, 13:23   #10
TUberwer
Форумчанин
 
Регистрация: 01.07.2013
Сообщений: 221
По умолчанию

Ну мне нужно что-то типа этого
Цитата:
- Описание API вызова библиотеки GoogleTranslateAPI.DLL (онлайн-перевод + озвучка)
Только чтоб языки были ru -> en и en -> ru
Убрать все Memo, оставить кнопку, нажимаешь на кнопку(нарпимер Start), говоришь слово, потом нажимаешь кнопку (например Stop), распознается текст который ты сказал, переводится на другой язык(ru -> en или en -> ru), и воспроизводится...
TUberwer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построитель списка файлов формата wav. Delphi excess Помощь студентам 1 07.04.2012 01:31
wav в flac fallther Мультимедиа в Delphi 2 22.03.2012 09:00
Чем формат FLAC отличается от формата MP3 кроме размера? Ibanez Wizard Софт 1 26.03.2011 12:55
играть сначала 1.wav потом 2.wav mma Мультимедиа в Delphi 9 23.12.2010 20:04
Конвертация аудиофайлов WAV -> WAV namestnik Помощь студентам 2 27.05.2009 23:05