Pull to refresh

Звук в Java

Reading time2 min
Views14K
Часто в приложениях желательно использовать какие-то вспомогательные звуковые эффекты, например пикнуть динамиком при ошибке или проиграть мелодию на новое письмо.
Не все знают что в любом компьютере имеющем звуковую карту встроена большая библиотека звуков. Все звуковые платы поддерживают воспроизведение звука по стандарту MIDI (см. ru.wikipedia.org/wiki/MIDI) а это 128 обычных и 40 ударных инструментов.

Что такое MIDI — это стандарт на команды управления синтезатором или другими устройствами воспроизведения звука. Т.е. в .mp3, например, хранится оцифрованный звук а в файлах .mid только ноты которые воспроизводит звуковая карта.

Я опубликовал библиотеку для простого доступа к воспроизведению MIDI-звука:

image


Исходный код с примером использования а так же скомпилированную библиотеку можно скачать на странице http://code.google.com/p/easy-midi/

Преимущества MIDI: есть в любом компе, содержит 128 обычных и 40 ударных инструментов воспроизводится муз.сопроцессором и не влияет на производительность воспроизводимую музыку можно интерактивно менять (если понимать чем диез от бемоля отличается).
Недостатки: звучание полностью зависит от звуковой карты и на разных компах может отличаться.

Пример простого вызова (играет в отдельном потоке):

Tools.playNote(Note.p93_7_La, Note.i127_Gunshot,127, 2000);
Tools.playDrum(Drum.d39_Hand_Clap, 127, 2000);

Названия нот и обычных инструментов для удобства заданы константами в файле Note.java, названия ударных инструментов в файле Drum.java.

Кроме воспроизведения отдельных нот, с помощью библиотеки можно проигрывать и небольшие музыкальные фрагменты. Пример небольшого риффа

int bassVoice=Note.i33_Electric_Bass_finger;
Drum hat=new Drum(4, Drum.d42_Closed_Hi_Hat,64);
Drum snare=new Drum(4, Drum.d38_Acoustic_Snare);
Drum bass=new Drum(4, Drum.d35_Acoustic_Bass_Drum);
Phrase p1=new Phrase()
        .chord(new Chord(8).drum(hat).drum(bass)        .note(8, Note.p28_2_Mi, bassVoice))
        .chord(new Chord(8).drum(hat)                   .note(8, Note.p28_2_Mi, bassVoice))
        .chord(new Chord(8).drum(hat).drum(snare)       .note(8, Note.p28_2_Mi, bassVoice))
        .chord(new Chord(8).drum(hat)                   .note(8, Note.p28_2_Mi, bassVoice))
        .chord(new Chord(8).drum(hat).drum(bass)        .note(8, Note.p28_2_Mi, bassVoice))
        .chord(new Chord(8).drum(hat).drum(bass)        .note(8, Note.p28_2_Mi, bassVoice))
        .chord(new Chord(8).drum(hat).drum(snare)       .note(8, Note.p34_2_La_Diese, bassVoice))
        .chord(new Chord(8).drum(hat)                   .note(8, Note.p35_2_Si, bassVoice))
;
Ticker ti = new Ticker(120, p1);
ti.restart();

Описание классов


Tools — содержит методы playNote и playDrum для воспроизведения единичных звуков
Ticker — проигрыватель фраз
Phrase — музыкальная фраза, содержит набор аккордов
Chord — аккорд, содержит высоту и длительность нот обычных и ударных инструментов аккорда
Drum — описание ударного инструмента в аккорде
Note — описание обычного инструмента в аккорде
Tags:
Hubs:
+29
Comments49

Articles