fmod - библиотека для работы со звуком
Участников: 5
Страница 1 из 1
fmod - библиотека для работы со звуком
fmod это кросплатформенная библиотека для работы со звуком. Её можно свободно использовать в некомерческих проектах.
Официальный сайт:
www.fmod.org
несколько статей, правда для c, но на русском
fMODерируем игровой звук
Введение в использование звукового движка FMOD EX
Использование FMOD в звуковых играх
Запись звука с использованием функций FMOD
Звуковое насилие
установка самого последнего стабильного пакета fmodapi v41803 win32
во freebasic лежит заголовочный файл для fmod 3.7.5
инсталятор для win32
мануал отдельно в html
Вот моя очень простая утилитка, демонстрирует запись и воспроизведение звука.
Это не конечная версия, буду дорабатывать.
Возможны ошибки, на которые, большая просьба, указывать.
А ещё лучше если вы подскажите, как их исправить.
У меня, под windows xp, работает.
Нужно лишь кинуть fmod.dll
Используються устройства по умолчанию. Проверьте, выбран ли у вас нужный soundblaster и подключен ли к нему микрофон!
версия 0.05
можно выделить фрагмент.
будет сохранён выделенный фрагмент
[ - начало фрагмента
] - конец фрагмента
версия 0.04
теперь можно сохранить и считать запись из файла.
o - вывод в файл
i - получение из файла
версия 0.03
добавил ограничение на длину воспроизводимого фрагмента.
версия 0.02
добавил паузу, остановку ну и просто немного дружелюбности.
версия 0.01
клавиши:
r - запись
p воспроизведение
s - остановить
пробел - пауза / играть
эскейп - выход из проги
Официальный сайт:
www.fmod.org
несколько статей, правда для c, но на русском
fMODерируем игровой звук
Введение в использование звукового движка FMOD EX
Использование FMOD в звуковых играх
Запись звука с использованием функций FMOD
Звуковое насилие
установка самого последнего стабильного пакета fmodapi v41803 win32
во freebasic лежит заголовочный файл для fmod 3.7.5
инсталятор для win32
мануал отдельно в html
Вот моя очень простая утилитка, демонстрирует запись и воспроизведение звука.
Это не конечная версия, буду дорабатывать.
Возможны ошибки, на которые, большая просьба, указывать.
А ещё лучше если вы подскажите, как их исправить.
У меня, под windows xp, работает.
Нужно лишь кинуть fmod.dll
Используються устройства по умолчанию. Проверьте, выбран ли у вас нужный soundblaster и подключен ли к нему микрофон!
версия 0.05
можно выделить фрагмент.
будет сохранён выделенный фрагмент
[ - начало фрагмента
] - конец фрагмента
версия 0.04
теперь можно сохранить и считать запись из файла.
o - вывод в файл
i - получение из файла
версия 0.03
добавил ограничение на длину воспроизводимого фрагмента.
версия 0.02
добавил паузу, остановку ну и просто немного дружелюбности.
версия 0.01
клавиши:
r - запись
p воспроизведение
s - остановить
пробел - пауза / играть
эскейп - выход из проги
- Код:
' запись и воспроизведение
' version: 0.05
#include once "fmod.bi"
declare sub ErrorQuit( byval Message as string )
declare sub tipe_help()
declare sub status_bar( byVal s as string )
const FALSE = 0
const samp_file = "sound.raw"
const record_rate = 22050 ' частота оцифровки
const record_len = 22050 * 10 ' длина записи
dim shared samp1 as FMUSIC_MODULE ptr
dim shared channel as integer
dim shared samp_len as integer
dim shared lab1 as integer
dim shared lab2 as integer
dim shared samp_cursor as integer
' загружаем файл
sub file_in()
samp1 = FSOUND_Sample_Load (FSOUND_FREE, samp_file, FSOUND_LOADRAW or FSOUND_STEREO or FSOUND_16BITS, 0,0)
FSOUND_Sample_SetDefaults (samp1, 22050, 255, 128, 255)
samp_len = record_len
lab1 = 0
lab2 = record_len
status_bar "stop"
end sub
' вывод в файл
sub file_out()
dim ptr1 as byte ptr
dim ptr2 as byte ptr
dim len1 as uinteger
dim len2 as uinteger
FSOUND_Sample_Lock( samp1, 4*lab1, 4*(lab2 - lab1 + 1), @ptr1, @ptr2, @len1, @len2)
locate 18, 1, 0
print "(" & ptr1 & " " & ptr2 & ") (" & len1 & " " & len2 & ")"
dim ff1 as integer = freeFile
' проверочное открытие файла
' если файл был, то он будет очищен
open samp_file for output as#ff1
close #ff1
' открываем для сохранения
open samp_file for binary as #ff1
put #ff1,, ptr1[0], len1
close #ff1
FSOUND_Sample_Unlock(samp1, ptr1, ptr2, len1, len2)
end sub
' создаём новый пустой семпл
sub new_samp()
samp1 = FSOUND_Sample_Alloc( FSOUND_UNMANAGED, record_len, FSOUND_STEREO or FSOUND_16BITS , record_rate, 255, 128, 255)
if samp1 = 0 then ErrorQuit("new sample")
end sub
' приостановка воспроизведения
sub s_p_pause()
static t as byte
if t = 0 then
t = 1 ' ставим на паузу
status_bar "pause"
else
t = 0 ' снимаем с паузы
status_bar "play"
end if
FSOUND_SetPaused( channel, t)
locate 19, 1, 0
print "position = " & str(FSOUND_GetCurrentPosition ( channel ))
end sub
' воспроизведение
sub s_play()
status_bar "play"
dim samp_pos as integer
' создаём канал для воспроизведения
channel = FSOUND_PlaySound(FSOUND_FREE, samp1)
' на стартовую позицию
FSOUND_SetCurrentPosition( channel, lab1 )
' крутимся в цикле пока идёт воспроизведение
do
samp_pos = FSOUND_GetCurrentPosition( channel )
' если уже проиграли записанный сэмпл
if samp_pos >= samp_len then
FSOUND_StopSound( channel )
exit do
end if
' проверка конца выбранного фрагмента
if samp_pos >= lab2 then
FSOUND_StopSound( channel )
exit do
end if
Sleep 50
' получаем и обрабатываем нажатие клавиш
select case inkey
case chr(32) ' пауза
s_p_pause
case "s", chr(27) ' прервать
FSOUND_StopSound( channel )
' интересно, а в конце петли, тоже нужно делать StopSound?
exit do
case "p" ' ещё раз играть с начала
FSOUND_StopSound( channel )
channel = FSOUND_PlaySound(FSOUND_FREE, samp1)
case "["
lab1 = samp_pos
case "]"
lab2 = samp_pos
end select
loop while (FSOUND_IsPlaying(channel))
status_bar "stop"
end sub
' начинаем запись
sub s_record()
status_bar "record"
if( FSOUND_Record_StartSample(samp1, FALSE) = 0) then
ErrorQuit("start record")
end if
' крутимся в цикле
do
sleep 50
select case inkey
case "s", chr(27)
exit do
end select
loop while (FSOUND_Record_GetPosition() < record_len)
' запоминаем длину записанного
samp_len = FSOUND_Record_GetPosition()
lab2 = samp_len
' останавливаем запись
FSOUND_Record_Stop()
status_bar "stop"
end sub
' основная
sub main()
cls
shell "title sound micro edit"
' проверка версии библиотеки
if( FSOUND_GetVersion() < FMOD_VERSION ) then
ErrorQuit( "FMOD version " & FMOD_VERSION & " or greater required" )
end if
' инициализация
if( FSOUND_Init( 22050, 32, 0) = FALSE ) then
ErrorQuit( "Can't initialize FMOD" )
end if
' выбор устройства для записи
if( FSOUND_Record_SetDriver(0) = FALSE ) then
ErrorQuit( "Can't initialize record drive" )
end if
' создать чистый сэмпл
new_samp
tipe_help
status_bar "stop"
' петля приёма и обработки нажатий клавиш
do
locate 23, 1, 0
print " - ";
sleep
select case inkey
case chr(27) ' выход
exit do
case "r" ' запись
s_record
case "p", chr(32)
s_play
case "i"
file_in
case "o" ' вывод в файл
file_out
case "["
lab1 = 0
case "]"
lab2 = samp_len
end select
loop
status_bar "exit"
if (samp1) then
FSOUND_Sample_Free(samp1)
end if
FSOUND_Close ()
end sub
main
end 0
' выход с ошибкой
sub ErrorQuit( byval Message as string )
print "ERROR: "; Message
FSOUND_Close
beep
sleep
end 1
end sub
' выводим справочку по командам
sub tipe_help()
locate 5, 1, 0
print "(esc) - exit"
print "p - play"
print "r - record"
rem print "s - stop"
print "(space) - pause / unpause"
end sub
' строка вывода статуса
sub status_bar( byVal s as string )
locate 25, 1, 0
print left( s & space(40), 40);
print left( " len = " & str(samp_len) & space(40), 40);
end sub
Последний раз редактировалось: Eric-S (Ср Сен 24, 2008 12:33 am), всего редактировалось 11 раз(а)
Re: fmod - библиотека для работы со звуком
Проверил, работает
На сколько я понял в данном примере можно только записывать и воспроизводить записанное.
Отлично, начало уже есть
Спасибо!
На сколько я понял в данном примере можно только записывать и воспроизводить записанное.
Отлично, начало уже есть
Спасибо!
Re: fmod - библиотека для работы со звуком
ShenZN , а какую версию fmod ты брал?
Да, сейчас только запись и воспроизведение.
Я же не допёр, как сохранить wav!
Там есть пример на vb, но в нём очень много всякого разного.
Похоже, что всё нужно делать ручками. Заголовок и т.д.
Файлы тоже будут, хочу прямо сохранять в raw, (естественном виде). Если ещё с этим разберусь.
Но если кто-нибудь напишет (выдерет) функцию сохранения в wav, то я её конечноже прикручу.
Пока я тестировал (выложен уже подправленный вариант) вышло пара приколов.
Например записал я полный семпл, а потом его переписал, но не до конца.
Воспроизводилось у меня, сначала новая часть, а потом остаток старой.
Когда же я чистый остановил не дописав до конца, то у меня игралась тишина.
Другой был прикол, когда я раз пять или десять запустил плэй. И сэмпл стал одновременно играть накладываясь сам на себя.
Вот так вот, буду мучать дальше. Хочу сделать маленький простенький редактор сэмплов.
Если кто знает, где можно найти русскую документацию по api, киньте ссылочку!
Меня особенно интересует спектральный анализ, изменение скорости и тона. fmod это точно умеет .
Ещё один прикол. Шарился по документации, в поисках функции анализа спектра и генерации и ничего не нашел.
Потом открыл, чтобы найти функции сохранения в файл, но тоже ничего не нашел.
Зато нашел функции анализа спектра. я думаю, что GetSpectrum это именно она.
Потом на форуме http://sources.ru нашел тему про генерацию сигналов.
Кстати я там задал вопросик, надеюсь, что ответят
http://forum.sources.ru/index.php?act=ST&f=72&t=250342&st=0#entry2072023
Сейчас пол часа баловался с демонстрационными прогами.
там есть например GenerateTone выдаёт почти любой сигнал, синусоида, треугольный, прямоугольный и даже белый шум. Для всех можно менять частоту, кроме шума почему-то.
Ну и вообще, очень много разных прикольных звуковых эффектов. Причём, как я понимаю, многие функции небыли вообще задействованы или работали на минимуме. Но это всё очень круто.
Вот Электрик, поковыряйся, тебе должно быть это очень интересно, там реверберация, флэйнжеры, отражение и многое другое. Помню ты мучался с простым синтезом, а тут всё уже есть и даже больше.
Да, сейчас только запись и воспроизведение.
Я же не допёр, как сохранить wav!
Там есть пример на vb, но в нём очень много всякого разного.
Похоже, что всё нужно делать ручками. Заголовок и т.д.
Файлы тоже будут, хочу прямо сохранять в raw, (естественном виде). Если ещё с этим разберусь.
Но если кто-нибудь напишет (выдерет) функцию сохранения в wav, то я её конечноже прикручу.
Пока я тестировал (выложен уже подправленный вариант) вышло пара приколов.
Например записал я полный семпл, а потом его переписал, но не до конца.
Воспроизводилось у меня, сначала новая часть, а потом остаток старой.
Когда же я чистый остановил не дописав до конца, то у меня игралась тишина.
Другой был прикол, когда я раз пять или десять запустил плэй. И сэмпл стал одновременно играть накладываясь сам на себя.
Вот так вот, буду мучать дальше. Хочу сделать маленький простенький редактор сэмплов.
Если кто знает, где можно найти русскую документацию по api, киньте ссылочку!
Меня особенно интересует спектральный анализ, изменение скорости и тона. fmod это точно умеет .
Ещё один прикол. Шарился по документации, в поисках функции анализа спектра и генерации и ничего не нашел.
Потом открыл, чтобы найти функции сохранения в файл, но тоже ничего не нашел.
Зато нашел функции анализа спектра. я думаю, что GetSpectrum это именно она.
Потом на форуме http://sources.ru нашел тему про генерацию сигналов.
Кстати я там задал вопросик, надеюсь, что ответят
http://forum.sources.ru/index.php?act=ST&f=72&t=250342&st=0#entry2072023
Сейчас пол часа баловался с демонстрационными прогами.
там есть например GenerateTone выдаёт почти любой сигнал, синусоида, треугольный, прямоугольный и даже белый шум. Для всех можно менять частоту, кроме шума почему-то.
Ну и вообще, очень много разных прикольных звуковых эффектов. Причём, как я понимаю, многие функции небыли вообще задействованы или работали на минимуме. Но это всё очень круто.
Вот Электрик, поковыряйся, тебе должно быть это очень интересно, там реверберация, флэйнжеры, отражение и многое другое. Помню ты мучался с простым синтезом, а тут всё уже есть и даже больше.
Последний раз редактировалось: Eric-S (Пт Сен 19, 2008 11:30 am), всего редактировалось 3 раз(а)
Re: fmod - библиотека для работы со звуком
Подскажите, пожалуйста, как такое понимать. В fmod.bi функция объявляеться так
А в исходнике на c, вызывается так
Ну я примерно начал так
Но меня смущают все эти амперсанты. Когда они нужны, а когда нет.
Неуверен, но кажеться вот эта функция в справочнике
Вот так в статье написано
Я написал функцию, но её вышибает. Однозначно напутал с указателями.
Подскажите, если знаете, в чём трабла.
- Код:
declare function FSOUND_Sample_Lock alias "FSOUND_Sample_Lock" (byval sptr as FSOUND_SAMPLE ptr, byval offset as integer, byval length as integer, byval ptr1 as any ptr ptr, byval ptr2 as any ptr ptr, byval len1 as uinteger ptr, byval len2 as uinteger ptr) as byte
А в исходнике на c, вызывается так
- Код:
void *ptr1, *ptr2;
unsigned int len1, len2;
FSOUND_Sample_Lock(samp1, 0, record_len, &ptr1, &ptr2, &len1, &len2);
Ну я примерно начал так
- Код:
dim ptr1 as any ptr
dim ptr2 as any ptr
dim len1 as uinteger
dim len2 as uinteger
FSOUND_Sample_Lock(samp1, 0, record_len, @ptr1, @ptr2, len1, len2)
Но меня смущают все эти амперсанты. Когда они нужны, а когда нет.
Неуверен, но кажеться вот эта функция в справочнике
Sound::lock
Returns a pointer to the beginning of the sample data for a sound.
Syntax
FMOD_RESULT Sound::lock(
unsigned int offset,
unsigned int length,
void ** ptr1,
void ** ptr2,
unsigned int * len1,
unsigned int * len2
);
Parameters
offset Offset in bytes to the position you want to lock in the sample buffer.
length Number of bytes you want to lock in the sample buffer.
ptr1 Address of a pointer that will point to the first part of the locked data.
ptr2 Address of a pointer that will point to the second part of the locked data. This will be null if the data locked hasn't wrapped at the end of the buffer.
len1 Length of data in bytes that was locked for ptr1
len2 Length of data in bytes that was locked for ptr2. This will be 0 if the data locked hasn't wrapped at the end of the buffer.
Return Values
If the function succeeds then the return value is FMOD_OK.
If the function fails then the return value will be one of the values defined in the FMOD_RESULT enumeration.
Вот так в статье написано
Для доступа к буферу звукового образца используются функции FSOUND_Sample_Unlock () и FSOUND_Sample_Lock (). При помощи этих функций можно получить непосредственный
доступ к звуковым отсчетам (сэмплам) и сохранить их на диске стандартными средствами для работы с файлами (функции fopen (), fwrite (), fclose ()). Вот
пример такого решения:
// Открываем файл для записи
FILE *f = fopen ("recdata.dat", "wb");
// Получаем доступ к звуковым данным в буфере звукового образца
// Буфер имеет кольцевую структуру, поэтому задается двумя указателями.
void *ptr1, *ptr2;
unsigned int len1, len2;
FSOUND_Sample_Lock(samp1, 0, rec_len, ptr1, ptr2, len1, len2);
fwrite(ptr1, len1, 1, f);
if (len2) fwrite(ptr2, len2, 1, f);
FSOUND_Sample_Unlock(samp1, ptr1, ptr2, len1, len2);
fclose(f);
Я написал функцию, но её вышибает. Однозначно напутал с указателями.
- Код:
' выходной файл
sub file_out()
dim ptr1 as any ptr
dim ptr2 as any ptr
dim len1 as uinteger
dim len2 as uinteger
FSOUND_Sample_Lock(samp1, 0, record_len, @ptr1, @ptr2, len1, len2)
dim ff1 as integer = freeFile
open "samp.raf" for binary as #ff1
put #ff1, 1, ptr1, len1
close #ff1
FSOUND_Sample_Unlock(samp1, ptr1, ptr2, len1, len2)
end sub
Подскажите, если знаете, в чём трабла.
Re: fmod - библиотека для работы со звуком
- Код:
void *ptr1, *ptr2;
unsigned int len1, len2;
FSOUND_Sample_Lock(samp1, 0, record_len, &ptr1, &ptr2, &len1, &len2);
Re: fmod - библиотека для работы со звуком
Эта функция должна, как раз, и заполнить (вернуть) два указателя и две длины.
Которые как раз и нужно использовать для того, чтобы сохранить в файл нужный фрагмент сэмпла.
Которые как раз и нужно использовать для того, чтобы сохранить в файл нужный фрагмент сэмпла.
Re: fmod - библиотека для работы со звуком
ну тада и надо передовать указатели, в которые помещать адрес данных, а не сами данные (которые не существуют)
тут какраз так и делается
тут какраз так и делается
void *ptr1, *ptr2;
unsigned int len1, len2;
FSOUND_Sample_Lock(samp1, 0, rec_len, ptr1, ptr2, len1, len2);
Re: fmod - библиотека для работы со звуком
И опять были заморочки с указателем. Я их решил и поспешил выложить новую версию.
Хочу отметить, что есть проблемы связанные со временем записи. Я её заметил, но ещё не решал.
клавиша "o" сохраняет в выходной файл.
а клавиша "i" загружает из файла.
Имя файла опятьже жостко вбито. Но по любому запись и чтение имеються, что и требовалось.
Хочу отметить, что есть проблемы связанные со временем записи. Я её заметил, но ещё не решал.
клавиша "o" сохраняет в выходной файл.
а клавиша "i" загружает из файла.
Имя файла опятьже жостко вбито. Но по любому запись и чтение имеються, что и требовалось.
fmod - библиотека для работы со звуком
привет. ты eric говорил про всякие эффекты fmod. да я знаю про это, генерация прямоугольного, и пилообразного звука там есть, а вот эффекты флэнжера, особенно реверба, Fmod использует eax, встроенный в звуковые карты типа creative. соответственно пропадает универсальность программы, а мне нужен был именно алгоритм реверба, низкочастотного фильтра. пример твоей проги посмотрел. но все же как будет не лень, сделаю записывалку через winmm.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: fmod - библиотека для работы со звуком
Обновил прогу, даже версию не стал менять, поскольку исправил пару символов.
Но это изменение стало крайне существенным, т.к. теперь сохраняються и загружаються все 10 сек записи, а не 2.5 сек, как это было раньше.
Electrik, спасибо за подсказку на счёт заголовков wav, я посмотрю и займусь сохранением в него.
Про эфекты, я так понял, что библиотека делает это сама. А в том случае если ресурсы карты свободны, то она передаёт операцию на аппаратную обработку.
Впрочем меня это не очень-то интересует.
Но это изменение стало крайне существенным, т.к. теперь сохраняються и загружаються все 10 сек записи, а не 2.5 сек, как это было раньше.
Electrik, спасибо за подсказку на счёт заголовков wav, я посмотрю и займусь сохранением в него.
Про эфекты, я так понял, что библиотека делает это сама. А в том случае если ресурсы карты свободны, то она передаёт операцию на аппаратную обработку.
Впрочем меня это не очень-то интересует.
Re: fmod - библиотека для работы со звуком
И ещё одно обновление. Реализовал выделение и сохранение фрагмента.
при воспроизведении нужно нажать левую квадратную скобочку "[" чтобы пометить начало фрагмента.
И правую квадратную скобочку "]" чтобы поставить метку конца фрагмента.
Теперь буду заморачиваться с курсором.
при воспроизведении нужно нажать левую квадратную скобочку "[" чтобы пометить начало фрагмента.
И правую квадратную скобочку "]" чтобы поставить метку конца фрагмента.
Теперь буду заморачиваться с курсором.
Re: fmod - библиотека для работы со звуком
Писал игрушку. Немного извращался со звуком.
Это не высший пилотаж, но есть интересные моменты. А в моей игре все потребности были удовлетворены. Посему код нельзя считать бесполезным.
например загружаем сэмпл так
Играем звук так
Написать было чуточку проще наоборот, но данные цифорки взяты из виндовой PlaySound которая изначально была в моей игрушке.
Функция возвращает канал.
Это сделано для фоновых звуков, я писал так
Другие звуки не тормозяться!
Извращения с массивом были нужны только ради быстрой выгрузки.
unload_samples
И всё! Сэмплы выгружаються, а fmod вырубаеться.
Вот так вот весело. А, да, мой макрос был заточен именно под мою игрушку. Звуки у меня в папочке sound и расширением ogg.
Просто до невозможности. Но работает, а это главное.
Это не высший пилотаж, но есть интересные моменты. А в моей игре все потребности были удовлетворены. Посему код нельзя считать бесполезным.
- Код:
#include "fmod.bi"
' указатели на загруженные сэмплы
redim shared samples(0) as FMUSIC_MODULE ptr
' канал для дополнительных звуков
dim shared channel_more as integer
' проверка версии библиотеки
if( FSOUND_GetVersion() < FMOD_VERSION ) then
print "FMOD version " & FMOD_VERSION & " or greater required"
end
end if
FSOUND_SetOutput(FSOUND_OUTPUT_dsound)
' инициализация
if( FSOUND_Init( 44100, 32, 0) = 0 ) then
print "Can't initialize FMOD"
end
end if
' функция загрузки сэмпла
function load_sample_file( byVal samp_file as string ) as integer
static sample_num as integer = 0
sample_num += 1
' растягиваем массив указателей
redim preserve samples(1 to sample_num) as FMUSIC_MODULE ptr
' загружаем
samples(sample_num) = FSOUND_Sample_Load(FSOUND_FREE, "sound/" & samp_file & ".ogg", FSOUND_HW2D, 0, 0)
if samples(sample_num) = 0 then
cls
print "error loading sample"
print "code: " & FSOUND_GetError
print chr(34) & "sound/" & samp_file & ".ogg" & chr(34)
sleep
end 1
end if
' возвращаем индекс
function = sample_num
end function
' выгрузка сэмплов
sub unload_samples()
dim i as integer
' высвобождаем и закрываем
for i = 1 to ubound(samples)
if samples(i) then
FSOUND_Sample_Free(samples(i))
end if
next
' закрываем fsound
FSOUND_Close ()
end sub
' проиграть сэмпл
function Play_sample( byval samp as integer, byVal flag1 as integer = 0 ) as integer
' создаем новый канал для воспроизведения звука
dim channel as integer
channel = FSOUND_PlaySoundEx(FSOUND_FREE, samples(samp), 0, 1)
' снимаем звук с паузы
FSOUND_SetPaused(channel, 0)
' крутимся в цикле пока идёт воспроизведение
if flag1 = 0 then
do
Sleep 50
loop while (FSOUND_IsPlaying(channel))
channel = 0
end if
' возвращаем номер канала
function = channel
end function
' макрос загрузки сэмпла
#Macro Load_sample(var, samp_file)
dim shared var as integer
var = load_sample_file(samp_file)
#EndMacro
например загружаем сэмпл так
- Код:
Load_sample( samp_hello, "hello") ' приветствие
Играем звук так
- Код:
:
play_sample( samp_hello )
Написать было чуточку проще наоборот, но данные цифорки взяты из виндовой PlaySound которая изначально была в моей игрушке.
Функция возвращает канал.
Это сделано для фоновых звуков, я писал так
- Код:
channel_more = play_sample( samp_hello, 1)
Другие звуки не тормозяться!
Извращения с массивом были нужны только ради быстрой выгрузки.
unload_samples
И всё! Сэмплы выгружаються, а fmod вырубаеться.
Вот так вот весело. А, да, мой макрос был заточен именно под мою игрушку. Звуки у меня в папочке sound и расширением ogg.
Просто до невозможности. Но работает, а это главное.
Re: fmod - библиотека для работы со звуком
Вот возник небольшой вопрос:
"FSOUND_STREAM *stream = //эдакий хендл на звуковой поток" - как это перевести на ФриБейсиковский?
И пожалуста укажите необходимые подготовления (то есть dim ы и пр.)
"FSOUND_STREAM *stream = //эдакий хендл на звуковой поток" - как это перевести на ФриБейсиковский?
И пожалуста укажите необходимые подготовления (то есть dim ы и пр.)
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 31
Откуда : Москва
Re: fmod - библиотека для работы со звуком
Упс. Даже так и не могу сказать.
FSOUND_STREAM это тип данных, наверное так прямо и делать
dim stream1 as FSOUND_STREAM PTR
ну и далее соответственно.
Хотя для игрушки... Имхо поток не нужен. Лучше все звуки грузануть в память и оттуда их играть.
FSOUND_STREAM это тип данных, наверное так прямо и делать
dim stream1 as FSOUND_STREAM PTR
ну и далее соответственно.
Хотя для игрушки... Имхо поток не нужен. Лучше все звуки грузануть в память и оттуда их играть.
Re: fmod - библиотека для работы со звуком
Так. Вот мучаю я ФриБейсик: примерно переводил с си, но не играет.
- Код:
#include once "fmod.bi"
Const FALSE = 0
Dim As single Ps, vl
Dim samp1 as FSOUND_SAMPLE ptr ,channel1 As Integer
'Print FSOUND_SetMinHardwareChannels
if FSOUND_GetVersion() < FMOD_VERSION Then End
FSOUND_SetOutput FSOUND_OUTPUT_DSOUND
FSOUND_SetDriver 0
FSOUND_SetMixer FSOUND_MIXER_AUTODETECT
FSOUND_Init 22050, 32, 0
samp1 = FSOUND_Sample_Load(FSOUND_FREE, "zap.wav", FSOUND_HW3D, 0,10)
FSOUND_Sample_SetMode samp1, FSOUND_LOOP_NORMAL
'PsQ = 10
'vlQ = 0
channel1 = FSOUND_PlaySoundEx(FSOUND_FREE, samp1, 0,-1)
ps = 10
vl = -10
FSOUND_3D_SetAttributes channel1, @ps, @vl
FSOUND_Update
FSOUND_SetPaused channel1, FALSE
Print "end"
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 31
Откуда : Москва
Re: fmod - библиотека для работы со звуком
Пожалуста, обратите внимание на предыдущий пост - для меня это очень важно.
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 31
Откуда : Москва
Re: fmod - библиотека для работы со звуком
- Код:
FSOUND_SAMPLE *samp1 = NULL;
int channel1 = -1;
/* проверяем версию FMOD */
if (FSOUND_GetVersion() < FMOD_VERSION)
{
/* обработка ошибки */
return 1;
}
/* выбираем базовую звуковую систему DirectSound */
FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND);
/* выбираем звуковую карту по умолчанию */
FSOUND_SetDriver(0);
/* позволяем FMOD выбрать микшер */
FSOUND_SetMixer(FSOUND_MIXER_AUTODETECT);
/* инициализируем FMOD */
/* частота, к которой будут приводится все звуки в микшере, - 22050 Гц */
/* максимальное число программных каналов - 32 */
if (!FSOUND_Init(22050, 32, 0))
{
/* обработка ошибки */
return 1;
}
/* загружаем в память звуковой фрагмент из файла myfile.wav */
/* константа FSOUND_HW3D указывает, что необходимо включить аппаратную поддержку 3D звука */
samp1 = FSOUND_Sample_Load(FSOUND_FREE, "myfile.wav", FSOUND_HW3D, 0, 0);
if (!samp1)
{
/* обработка ошибки */
return 1;
}
/* устанавливаем циклическое воспроизведение, т.е. */
/* источник слышен всегда */
FSOUND_Sample_SetMode(samp1, FSOUND_LOOP_NORMAL);
/* указываем позицию и скорость источника */
float pos[3] = { -10.0f, -20.0f, 0.5f };
float vel[3] = { 0,0,0 };
/* создаем новый канал для воспроизведения звука */
/* сразу же приостанавливаем воспроизведение */
channel1 = FSOUND_PlaySoundEx(FSOUND_FREE, samp1, NULL, TRUE);
if (channel1 == -1)
{
/* обработка ошибки */
return 1;
}
/* помещаем источник звука в нужную точку */
FSOUND_3D_SetAttributes(channel1, pos, vel);
/* здесь может происходить изменение позиции слушателя */
. . .
/* обновляем звуковую картину */
FSOUND_Update();
/* возобновляем воспроизведение */
FSOUND_SetPaused(channel1, FALSE);
. . .
Я с Си дела почти не имел, вот и криво перевожу.
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 31
Откуда : Москва
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения