Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.51/69: Рейтинг темы: голосов - 69, средняя оценка - 4.51
nick42
Практикантроп
4488 / 2448 / 447
Регистрация: 23.09.2011
Сообщений: 5,258
1

Как воспроизвести звук из ресурса (mp3)

23.09.2011, 13:15. Просмотров 13420. Ответов 26
Метки нет (Все метки)

Мне в приложении нужно использовать три муз. фрагмента *.mp3, которые я поместил в ресурсы как BINARY.
Сейчас я поступаю "некрасиво", - отправляю их в буфер, его записываю как файл и в функции воспроизведения ...
hwnd = MCIWndCreate(hwndParent, hInstance, 0, "fragm.mp3");
MCIWndPlay(hwnd);
пользуюсь этим файлом.
ХОТЕЛОСЬ БЫ "научить" MCIWndCreate вместо файла использовать сам буфер (массив) или поток.
Может кто знает, как иначе "скроить" воспроизведение *.mp3 из ресурса?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2011, 13:15
Ответы с готовыми решениями:

Как воспроизвести mp3-звук
Всем здравствуйте. Для wav-файлов всё понятно. Воспроизвести: ...

Как воспроизвести звук ?
Здравствуйте. Подскажите как сделать чтобы функция sndPlaySound могла воспроизвести звуковой файл,...

Как записать звук с микрофона и воспроизвести его?
Подскажите как записать звук с микрофона (можно в wav файл но желательно в буфер) и воспроизвести...

BASS: Воспроизвести звук из потока
делаю как сказано в документации: TResourceStream *mus_buff = new TResourceStream(0,...

Воспроизвести звук с html страницы, что находится в ресурсах
Хелп!Проблема с аудио файлами не могу воспроизвести в WebBrowser звук из ресурсов? Аудио-файл и...

26
pomkalk
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
23.09.2011, 16:50 2
bass.dll тебе в помощь + документация в архиве
1
LK
Заблокирован
23.09.2011, 17:32 3
может, LoadFromResourceName, или LoadFronStream, или
C++
1
PlaySound("IDC_NAME" /*имя ресурса*/, 0, SND_RESOURCE );
я не помню, умеет ли PlaySound играть мп3, но общий подход такой
0
Programmer.
Прогер
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
23.09.2011, 17:56 4
nick42,
Вас нужен работать с bass -ом (bass.dll, bass.h, bass.lib)
0
23.09.2011, 17:56
Flyer
wtf!?
748 / 279 / 24
Регистрация: 21.05.2010
Сообщений: 732
23.09.2011, 20:23 5
LK, mp3 вроде не умеет, ну или у меня просто не получилось =/
0
nick42
Практикантроп
4488 / 2448 / 447
Регистрация: 23.09.2011
Сообщений: 5,258
23.09.2011, 22:27  [ТС] 6
PlaySound с WAV точно умеет работать из ресурса (проверено); только вот размер программы неоправданно растёт. Также не очень бы хотелось использовать подгружаемые библиотеки (типа bass.dll) - оставлю на крайний случай. Пока играюсь с SND_MEMORY в функции:
C++
1
 PlaySound(buff, 0, SND_MEMORY);
но пока в программе вываливается на ошибку.
0
Flyer
wtf!?
748 / 279 / 24
Регистрация: 21.05.2010
Сообщений: 732
23.09.2011, 23:57 7
а у меня почему то не получается вавку с ресурса проиграть >_<
nick42, подскажи
0
nick42
Практикантроп
4488 / 2448 / 447
Регистрация: 23.09.2011
Сообщений: 5,258
24.09.2011, 12:02  [ТС] 8
Цитата Сообщение от Flyer Посмотреть сообщение
а у меня почему то не получается вавку с ресурса проиграть >_<
nick42, подскажи
Я делаю так: подключаю к проекту файл ресурсов - nn.rc, в котором есть строка типа:
BUBEN SOUND "img/buben.wav"
и в программе что-то наподобие этого (с использованием #include <mmsystem.h>):
C++
1
2
3
4
    void __fastcall TForm1::Button1Click(TObject *Sender)
{
      PlaySound("BUBEN", 0, SND_RESOURCE | SND_ASYNC);
}
1
Flyer
wtf!?
748 / 279 / 24
Регистрация: 21.05.2010
Сообщений: 732
24.09.2011, 13:05 9
ага, тип саунд. Просто в рад хе2 в проект - > ресурсы и картинки не было такого типа
0
nick42
Практикантроп
4488 / 2448 / 447
Регистрация: 23.09.2011
Сообщений: 5,258
25.09.2011, 00:55  [ТС] 10
... и всё же по теме: можно ли каким-то образом сопоставить имени (constant char) поток со свойствами файла или именованный массив, тоже со свойствами файла. Что бы MultimediaControlInterface (MCI) захотел работать с ним, как с файлом, и не пришлось бы создавать промежуточный файл на диске (а не в памяти)?
0
LK
Заблокирован
25.09.2011, 01:03 11
Цитата Сообщение от Flyer Посмотреть сообщение
ага, тип саунд. Просто в рад хе2 в проект - > ресурсы и картинки не было такого типа
ну а RCDATA там было ?
0
Flyer
wtf!?
748 / 279 / 24
Регистрация: 21.05.2010
Сообщений: 732
25.09.2011, 01:13 12
было, собственно то я и выбрал, но звук не проигрывался.
а сейчас попробовал, походу я просто не услышал его
0
nick42
Практикантроп
4488 / 2448 / 447
Регистрация: 23.09.2011
Сообщений: 5,258
25.09.2011, 01:28  [ТС] 13
Цитата Сообщение от LK Посмотреть сообщение
ну а RCDATA там было ?
запись в файле .rc строки вида
soundX RCData "file.wav"
действительно помещает этот файл в раздел RCData ресурсов; но как его затем воспроизвести? Флаг "SND_RESOURCE" указывает на тип ресурса, а какой должен быть флаг в случае RCData, - я не знаю. Может "SND_ALIAS_ID"? Путем перебора всех флагов - длинная песня получается... .
0
Flyer
wtf!?
748 / 279 / 24
Регистрация: 21.05.2010
Сообщений: 732
25.09.2011, 01:31 14
а не, LK, он таки не проигрывается когда тип ресурса RCDATA
0
LK
Заблокирован
25.09.2011, 02:37 15
читай сюды
1
nick42
Практикантроп
4488 / 2448 / 447
Регистрация: 23.09.2011
Сообщений: 5,258
25.09.2011, 10:06  [ТС] 16
LK, спасибо! Интересная статья

Добавлено через 1 час 16 минут
Поймите правильно мою назойливость... . Какие варианты рассматриваются: заменить в ресурсах .mp3 на .wav и использовать winmm.dll; использовать сторонние библиотеки (bass.dll), а значит портабельность приложения под угрозой, - нужно использовать инсталлятор; наконец оставить всё как есть, то-есть создавать временный файл, а это ведёт к задержке звука по крайней мере при первом запуске. Между тем, - третий вариант (временный файл и стандартная библиотека) меня бы вполне устроил без временного файла. И он работает! Не могу поверить, что в возможностях мощного C++ нет такой возможности, как подмена физического файла на диске его аналогом в виде массива или потока. Ведь структура данных идентична!
0
pomkalk
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
25.09.2011, 11:32 17
Цитата Сообщение от nick42 Посмотреть сообщение
а значит портабельность приложения под угрозой
Когда я первый раз его использовал, мне так же стало интересно, и я наделал много разных маленьких программ, после чего пробывал на разных компах, проблем не было вообще!
PS в прогах я библиотеку подключал динамически
0
nick42
Практикантроп
4488 / 2448 / 447
Регистрация: 23.09.2011
Сообщений: 5,258
25.09.2011, 11:56  [ТС] 18
Даже если динамически... - я куда от использования bass.dll денусь? А если ее нет на компе? С собой носить? Это было бы удачное решение, не будь стандартной библиотеки msvfw32, которая умеет воспроизводить mp3 (мне и качество-то особо не нужно!). Вопрос в том, как ей подсунуть вместо физического файла виртуальный.
0
LK
Заблокирован
25.09.2011, 13:05 19
ну так сделайте себе поток:
C++
1
TMemoryStream *MyResourceStream;
0
nick42
Практикантроп
4488 / 2448 / 447
Регистрация: 23.09.2011
Сообщений: 5,258
25.09.2011, 13:15  [ТС] 20
... и. И куда его потом направить?...
0
25.09.2011, 13:15
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2011, 13:15

Как воспроизвести звуковой файл ресурса
Как воспроизвести в AxWindowsMediaPlayer файл из ресурса? звуковой обычный wav закинут в ресурс....

Как воспроизвести mp3
Пробую таким способом: System.Media.SoundPlayer sp = new System.Media.SoundPlayer(@&quot;C:\My...

Как воспроизвести mp3 файл
Как воспроизвести mp3 или другой звуковой файл?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.