오디오 재생
이 문서는 오디오 큐와 관련된 이벤트에 대해 설명합니다. 이 이벤트는 오디오 큐 재생 함수에 의해 트리거되며, async_load
변수에 저장된 DS 맵을 반환합니다. 이 맵은 이벤트를 트리거한 오디오 큐와 관련된 다양한 키/값 쌍을 포함합니다. 이벤트는 오디오 큐에서 재생할 오디오를 선택하고, 해당 큐의 버퍼가 재생을 마쳤을 때 콜백에 의해 트리거됩니다.
DS 맵의 키
다음은 DS 맵에서 사용할 수 있는 키입니다:
키 | 설명 |
---|---|
queue_id |
재생이 완료된 큐의 인덱스. audio_create_play_queue() 함수에 의해 반환됩니다. |
buffer_id |
더 이상 재생되지 않는 버퍼의 ID. |
queue_shutdown |
일반 재생 중에는 0으로 설정되며, audio_free_play_queue() 가 호출되면 1로 설정됩니다. 이 값이 1일 때는 추가 데이터를 큐에 추가하지 않아야 합니다. |
오디오 큐는 여러 버퍼에서 생성될 수 있으므로, 각 버퍼의 오디오 섹션이 끝날 때마다 이 이벤트가 여러 번 트리거될 수 있습니다. 따라서 buffer_id
키가 중요합니다.
async_load
변수는 비동기 이벤트에서만 유효합니다. 이 변수는 이벤트 시작 시 생성된 DS 맵을 가리키며, 이벤트가 끝날 때 삭제됩니다. 이 변수는 -1로 재설정됩니다. 이벤트에서 생성된 모든 데이터 구조는 적절한 함수를 사용하여 정리해야 합니다.
사용 예제
아래는 10개의 버퍼된 오디오 사운드를 추가하여 오디오 큐를 생성하고 재생하는 예제입니다:
audio_queue = audio_create_play_queue(buffer_s16, 11052, audio_mono);
for (var i = 0; i < 10; i++;){
audio_queue_sound(audio_queue, audio_buffer[i], 0, buffer_get_size(audio_buffer[i]));
}
audio_play_sound(audio_queue, 0, true);
게임 스텝마다 녹음이 감지되면 비동기 오디오 녹음 이벤트가 트리거됩니다. 녹음된 입력을 처리하는 방법은 다음과 같습니다:
var queue = async_load[? "queue_id"];
var num = 0;
if (queue == audio_queue){
for (var i = 0; i < 10; i++;){
if async_load[? "buffer_id"] == audio_buffer[i]{
buffer_seek(audio_buffer[i], buffer_seek_start, 0);
num = i;
}
}
if (num == 9){
audio_stop_sound(audio_queue);
audio_free_play_queue(audio_queue);
}
}
위의 코드에서는 큐 ID를 확인하고, 원하는 큐인지 확인한 후, buffer_id
키의 값을 확인하여 재생이 완료된 버퍼를 가져옵니다. 그런 다음, 해당 사운드의 시작으로 버퍼를 되돌립니다. 로컬 변수가 9에 도달하면 큐가 완료된 것을 나타내며, 사운드 재생을 중지하고 큐를 해제합니다.