오디오 큐 소리 추가하기 (audio_queue_sound)
이 문서는 audio_queue_sound 함수를 설명하며, 이 함수가 오디오 큐에 소리를 추가하는 방법과 이를 활용하는 예제를 다룹니다.
함수 설명
audio_queue_sound 함수는 이전에 audio_create_play_queue() 함수를 사용하여 생성한 오디오 큐에 버퍼의 데이터를 추가합니다. 추가할 큐의 인덱스, 데이터가 포함된 버퍼의 ID, 버퍼 내에서 시작할 위치(오프셋), 그리고 추가할 바이트 수를 지정합니다.
구문:
audio_queue_sound(queueIndex, bufferId, bufferOffset, bufferLength);
매개변수 설명
| 매개변수 | 타입 | 설명 |
|---|---|---|
| queueIndex | Audio Queue ID | 추가할 큐의 인덱스 |
| bufferId | Buffer ID | 큐에 추가할 데이터가 있는 버퍼의 ID |
| bufferOffset | Real | 소스 버퍼에서 시작할 오프셋 |
| bufferLength | Real | 버퍼의 길이(바이트 수) |
반환값
- 없음 (N/A)
사용 예제
아래 코드는 비동기 오디오 녹음 이벤트에서 호출되며, 일부 녹음된 데이터를 버퍼에 할당하고 이를 오디오 큐에 추가한 후 재생하는 작업을 수행합니다.
len = async_load[? "data_len"];
audio_buff = buffer_create(len, buffer_fast, 1);
buffer_copy(async_load[? "buffer_id"], 0, len, audio_buff, 0);
audio_queue_sound(audio_queue, audio_buff, 0, len);
audio_play_sound(audio_queue, 10, 0);
위 예제에서: - len 변수는 비동기 로드에서 데이터 길이를 가져옵니다. - audio_buff는 지정된 길이로 새 버퍼를 생성합니다. - buffer_copy 함수는 비동기 로드된 버퍼의 데이터를 새로운 버퍼로 복사합니다. - audio_queue_sound 함수는 만든 버퍼의 음원을 오디오 큐에 추가합니다. - 마지막으로 audio_play_sound가 호출되어 해당 오디오 큐를 재생합니다.
다양한 활용 및 응용 예제
- 여러 음원 추가하기
여러 개의 버퍼에서 소리를 추가하고 재생하는 방법입니다.
```gml var sound1 = buffer_create(512, buffer_fast, 1); var sound2 = buffer_create(512, buffer_fast, 1);
buffer_copy(buffer1_id, 0, 512, sound1, 0); buffer_copy(buffer2_id, 0, 512, sound2, 0);
audio_queue_sound(audio_queue, sound1, 0, 512); audio_queue_sound(audio_queue, sound2, 0, 512); audio_play_sound(audio_queue, 10, 0); ```
- 오디오 큐 상태 확인하기
오디오 큐의 상태를 확인하고 필요에 따라 큐를 비우는 방법입니다.
gml if (audio_queue_status(audio_queue) == audio_queue_paused) { audio_free_play_queue(audio_queue); }
- 동적 오디오 재생
사용자의 입력에 따라 다른 오디오를 추가하고 재생하는 방법입니다.
gml if (is_key_pressed) { var user_sound = buffer_create(1024, buffer_fast, 1); buffer_copy(user_buffer_id, 0, 1024, user_sound, 0); audio_queue_sound(audio_queue, user_sound, 0, 1024); audio_play_sound(audio_queue, 20, 0); }
참고
- 다음 섹션으로는 오디오 버퍼에 대한 설명이 이어집니다.
- 이전 섹션은 오디오 녹음 시작 관련 기능입니다.
© Copyright YoYo Games Ltd. 2023 All Rights Reserved