MP3 + файл ресурсов = "отсутствует файл"

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Олег Козлов
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 26.05.2005 (Чт) 15:56
Откуда: Нижний Тагил

MP3 + файл ресурсов = "отсутствует файл"

Сообщение Олег Козлов » 26.05.2005 (Чт) 15:59

В общем, столкнулся с такой проблемой...

Делаю очередную версию игры "Кто хочет стать миллионером?" (желающие могут скачать ее по адресу http://oleg-nt.narod.ru ), решил туда вставить звуки. Естественно, в формате MP3 (чтобы инсталлятор не разбух - распространение через Интернет). Так вот, такой пример проигрывает файлы любого формата:

----------------------------------------------
Private Declare Function mciExecute _
Lib "winmm.dll" _
(ByVal lpstrCommand As String) As Long

'чтобы воспроизвести файлPrivate Sub Command1_Click()
Call mciExecute("play d:\SilentCikle\05.mp3")
End Sub

'чтобы закрыть файлPrivate Sub Command2_Click()
Call mciExecute("close d:\SilentCikle\05.mp3")
End Sub
----------------------------------------------

Когда mp3 - отдельный файл, проигрывается все нормально. Заталкиваю в файл ресурсов - появляется сообщение, что файл не найден. Как можно это исправить (чтобы эта функция находила mp3-шник в ресурсах?).

PS. Что я делал: Я заталкивал звук (start1.mp3) в ресурсы как "Custom Resource". Затем вызывал вышеприведенную функцию так: Call mciExecute("play start1.mp3"). Может, существует какое-то специальное обозначение того, что обращаемся к ресурсам exe-шника? Ну например,
Call mciExecute("play <бла-бла-бла>\start1.mp3").

!!!!!! И ЕЩЕ: Надо бы как-то реализовать, чтобы файл мог проигрываться циклично (это нужно для фонового звука) и чтобы не было слышно стыка.

Заранее благодарю всех, кто поможет.

Козлов Олег.
26 мая 2005 года

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 26.05.2005 (Чт) 16:18

Ух ты! И откуда же из ресурсов файл? Ты в начале его извлеки в массив, потом пиши в файл и воспроизводи.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 26.05.2005 (Чт) 16:37

ПРоскакивало, толи на форуме, толи на сайте...
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 26.05.2005 (Чт) 17:00

Держи вот, набросал за минуту...

Код: Выделить всё
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Private Sub Form_Load()
    Dim bAudioArr() As Byte
    Dim f As Long
    ReDim bAudioArr(UBound(LoadResData(101, "CUSTOM")))
    bAudioArr() = LoadResData(101, "CUSTOM")
    f = FreeFile
    Open "C:\Music.mp3" For Binary Access Write As #f
        Put #f, , bAudioArr
    Close #f
    Call mciSendString("open C:\Music.mp3 alias music wait", "", 0, 0)
    Call mciSendString("play music", "", 0, 0)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call mciSendString("close all", "", 0, 0)
End Sub
Последний раз редактировалось BV 22.09.2005 (Чт) 1:09, всего редактировалось 2 раз(а).
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 26.05.2005 (Чт) 17:03

BV писал(а):Держи вот, набросал за минуту...

Код: Выделить всё
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

Private Sub Form_Load()
    Dim bAudioArr() As Byte
    Dim f As Long
    ReDim bAudioArr(UBound(LoadResData(101, "CUSTOM")))
    bAudioArr() = LoadResData(101, "CUSTOM")
    f = FreeFile
    Open "C:\Music.mp3" For Binary Access Write As #f
        Put #f, , bAudioArr
    Close #f
    Call mciSendString("open C:\Music.mp3 alias music wait", "", 0, 0)
    Call mciSendString("play music", "", 0, 0)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call mciSendString("close all", "", 0, 0)
End Sub



Ты не понял? Или не веришь что так можно?))
Ему из ресурсов нужно!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 26.05.2005 (Чт) 17:19

Хех... Тогда ему mciExecute не поможет. Пусть в память массив загоняет, и sndPlaySound'ом читает. Но тут mp3 не подойдёт.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 26.05.2005 (Чт) 19:30

А распаковать в temp-директорию не пойдет? LoadResData и вперед! :)
Моду создают модоки, а распространяют модозвоны.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 26.05.2005 (Чт) 20:16

Я же это в коде и предложил. Иначе понадобятся WAV файлы...
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 31.05.2005 (Вт) 14:11

Не сочтите за рекламу... а если реклама - то удалите пост нафик +_+ Не обижусь +_+

Делал что-то типа "О щаслифчика", тока для Медицинского Универа +_+ И без звука... Но все равно - кому не впадлу - зацените:

http://afov.narod.ru/ajtests.zip


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 86

    TopList