Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/95: Рейтинг темы: голосов - 95, средняя оценка - 4.51
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
1

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

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

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

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

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

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

Как воспроизвести mp3 файл?
Всем привет! Как воспроизвести mp3 файл?

26
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
Прогер
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
23.09.2011, 17:56 4
nick42,
Вас нужен работать с bass -ом (bass.dll, bass.h, bass.lib)
0
wtf!?
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
23.09.2011, 20:23 5
LK, mp3 вроде не умеет, ну или у меня просто не получилось =/
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
23.09.2011, 22:27  [ТС] 6
PlaySound с WAV точно умеет работать из ресурса (проверено); только вот размер программы неоправданно растёт. Также не очень бы хотелось использовать подгружаемые библиотеки (типа bass.dll) - оставлю на крайний случай. Пока играюсь с SND_MEMORY в функции:
C++
1
 PlaySound(buff, 0, SND_MEMORY);
но пока в программе вываливается на ошибку.
0
wtf!?
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
23.09.2011, 23:57 7
а у меня почему то не получается вавку с ресурса проиграть >_<
nick42, подскажи
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
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
wtf!?
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
24.09.2011, 13:05 9
ага, тип саунд. Просто в рад хе2 в проект - > ресурсы и картинки не было такого типа
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
25.09.2011, 00:55  [ТС] 10
... и всё же по теме: можно ли каким-то образом сопоставить имени (constant char) поток со свойствами файла или именованный массив, тоже со свойствами файла. Что бы MultimediaControlInterface (MCI) захотел работать с ним, как с файлом, и не пришлось бы создавать промежуточный файл на диске (а не в памяти)?
0
LK
Заблокирован
25.09.2011, 01:03 11
Цитата Сообщение от Flyer Посмотреть сообщение
ага, тип саунд. Просто в рад хе2 в проект - > ресурсы и картинки не было такого типа
ну а RCDATA там было ?
0
wtf!?
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
25.09.2011, 01:13 12
было, собственно то я и выбрал, но звук не проигрывался.
а сейчас попробовал, походу я просто не услышал его
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
25.09.2011, 01:28  [ТС] 13
Цитата Сообщение от LK Посмотреть сообщение
ну а RCDATA там было ?
запись в файле .rc строки вида
soundX RCData "file.wav"
действительно помещает этот файл в раздел RCData ресурсов; но как его затем воспроизвести? Флаг "SND_RESOURCE" указывает на тип ресурса, а какой должен быть флаг в случае RCData, - я не знаю. Может "SND_ALIAS_ID"? Путем перебора всех флагов - длинная песня получается... .
0
wtf!?
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
25.09.2011, 01:31 14
а не, LK, он таки не проигрывается когда тип ресурса RCDATA
0
LK
Заблокирован
25.09.2011, 02:37 15
читай сюды
1
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
25.09.2011, 10:06  [ТС] 16
LK, спасибо! Интересная статья

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

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

Как воспроизвести mp3 файл из ресурсов?
У меня в ресурсах проекта есть mp3 и я его хочу воспроизвести. Как же мне это сделать? И чтобы...

Как воспроизвести MP3 файл по ссылке?
Здравствуйте! Имеется ссылка на mp3 файл &quot;http://sait.ru/file.mp3&quot;. Нужно сделать, что бы по...

Как воспроизвести стандартными средствами mp3 файл
Как воспроизвести стандартными средствами mp3 файл в python. Без разных сторонних модулей, просто...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru