Запись аудио на Builder C++
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
-
- Сообщения: 4
- Зарегистрирован: 17 фев 2016, 10:57
Есть 2 кнопки, предположим что в программе проигрываются аудиофайлы. Нужно что бы при нажатии на первую кнопку, начиналась запись в аудиофайл, при нажатии на вторую запись заканчивается. В общем нужно что бы этот фрагмент между нажатием на первую и вторую кнопку записался в аудиофайл. Как сделать? (Любыми способами)
Ответьте хоть кто-нибудь. 4-ый форум и ни кто не отвечает(
Ответьте хоть кто-нибудь. 4-ый форум и ни кто не отвечает(
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
А гуглить не пробовал? Вот первая ссылка в выдаче, например.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
-
- Сообщения: 4
- Зарегистрирован: 17 фев 2016, 10:57
Пробовал, здесь как то слишком много мне кажется...Romeo писал(а):А гуглить не пробовал? Вот первая ссылка в выдаче, например.
Сам пробовал писать так:
Код: Выделить всё
void __fastcall TForm1::Image28Click(TObject *Sender)
{
mciSendString("OPEN NEW TYPE WAVEAUDIO ALIAS rec", NULL, 0, NULL);
mciSendString("set rec bitspersample 8 samplespersec 8000 channels 1", NULL, 0, NULL);
mciSendString("record rec", NULL, 0, NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image29Click(TObject *Sender)
{
mciSendString("STOP rec", NULL, 0, NULL);
mciSendString("SAVE rec lol.mp3", NULL, 0, NULL);
mciSendString("CLOSE rec", NULL, 0, NULL);
}
Файл создаётся, но он пустой...
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Есть лишь общие рекомендации, так как c mci я раньше не работал.
Если файл пустой, то предположу, произошла какая-то ошибка. Возможно неправильно были сформированы команды или посланы не в том порядке. Сформируй строку, содержащую текст ошибки с помощью вызова mciGetErrorString и посмотри, что там будет написано.
Подробное описание команд можно найти на MSDN вот тут.
Если файл пустой, то предположу, произошла какая-то ошибка. Возможно неправильно были сформированы команды или посланы не в том порядке. Сформируй строку, содержащую текст ошибки с помощью вызова mciGetErrorString и посмотри, что там будет написано.
Подробное описание команд можно найти на MSDN вот тут.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
-
- Сообщения: 4
- Зарегистрирован: 17 фев 2016, 10:57
я пытался так
Image28 - первая кнопка
Image29 - вторая кнопка
Код: Выделить всё
void __fastcall TForm1::Image28Click(TObject *Sender)
{
mciSendString("OPEN NEW TYPE WAVEAUDIO ALIAS rec", NULL, 0, NULL);
mciSendString("set rec bitspersample 8 samplespersec 8000 channels 1", NULL, 0, NULL);
mciSendString("record rec", NULL, 0, NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image29Click(TObject *Sender)
{
mciSendString("STOP rec", NULL, 0, NULL);
mciSendString("SAVE rec lol.mp3", NULL, 0, NULL);
mciSendString("CLOSE rec", NULL, 0, NULL);
}
Image29 - вторая кнопка
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Ты уже второй раз привёл этот код. Я его уже видел.
Говорю же, получи текст ошибки и прочти его. Скорее всего он даст тебе знать, что не так.
Говорю же, получи текст ошибки и прочти его. Скорее всего он даст тебе знать, что не так.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
-
- Сообщения: 4
- Зарегистрирован: 17 фев 2016, 10:57
Я просто подумал, что не отправилось...
Ладно, спасибо, ща юзну
Ладно, спасибо, ща юзну
На этом форуме уже была тема синтеза звука и записи его в файл. http://forum.developing.ru/showthread.php/22440
Внимательно её прочитай. Что касается твоего примера, то тебе не нужно этот звук воспроизводить, а нужно только записать в файл. Таким образом при нажатии первой кнопки просто получи текущее время начала записи. После нажатия второй кнопки получи текущее время и отними от него момент начала записи. Получим длительность звучания. В приведённом выше примере (пост #5) показано как задавать время звучания синтезируемого фрагмента. А в последнем посте показано как записывать полученный звук в файл.
Внимательно её прочитай. Что касается твоего примера, то тебе не нужно этот звук воспроизводить, а нужно только записать в файл. Таким образом при нажатии первой кнопки просто получи текущее время начала записи. После нажатия второй кнопки получи текущее время и отними от него момент начала записи. Получим длительность звучания. В приведённом выше примере (пост #5) показано как задавать время звучания синтезируемого фрагмента. А в последнем посте показано как записывать полученный звук в файл.