1/* 2 * Copyright 2009, Krzysztof ��wiertnia (krzysiek.bmkx_gmail_com). 3 * Copyright 2011, Adrien Destugues (pulkomandy@pulkomandy.ath.cx) 4 * All Rights Reserved. Distributed under the terms of the MIT License. 5 */ 6 7 8#include <stdio.h> 9#include <stdlib.h> 10#include <string.h> 11 12#include <GameSoundDefs.h> 13#include <InterfaceDefs.h> 14#include <PushGameSound.h> 15#include <View.h> 16 17 18int 19main(int argc, char *argv[]) 20{ 21 // 256 frames * 4 buffer parts * 2 channels * 2 bytes per sample 22 // will give us internal buffer of 4096 bytes 23 size_t framesPerBufferPart = 256; 24 size_t bufferPartCount = 4; 25 26 if (argc != 1 && argc != 3) { 27 printf("Usage: %s [<frames per part> <parts>]\n", 28 argv[0]); 29 return 0; 30 } 31 32 if (argc == 3) { 33 size_t size = strtoul(argv[1], NULL, 10); 34 if (size > 0) 35 framesPerBufferPart = size; 36 37 size = strtoul(argv[2], NULL, 10); 38 if (size == 1) { 39 printf("at least 2 buffer parts are needed\n"); 40 return 1; 41 } 42 if (size > 0) 43 bufferPartCount = size; 44 } 45 46 printf("frames per buffer part: %ld\n", framesPerBufferPart); 47 printf("buffer part count: %ld\n", bufferPartCount); 48 49 gs_audio_format gsFormat; 50 memset(&gsFormat, 0, sizeof(gsFormat)); 51 gsFormat.frame_rate = 44100; 52 gsFormat.channel_count = 1; 53 gsFormat.format = gs_audio_format::B_GS_U8; 54 55 BPushGameSound pushGameSound(framesPerBufferPart, &gsFormat, 56 bufferPartCount); 57 if (pushGameSound.InitCheck() != B_OK) { 58 printf("trouble initializing push game sound: %s\n", 59 strerror(pushGameSound.InitCheck())); 60 return 1; 61 } 62 63 uint8 *buffer; 64 size_t bufferSize; 65 if (pushGameSound.LockForCyclic((void **)&buffer, &bufferSize) 66 != BPushGameSound::lock_ok) { 67 printf("cannot lock buffer\n"); 68 return 1; 69 } 70 71 for (int i = 0; i < bufferSize; i++) 72 buffer[i] = i; 73 74 if (pushGameSound.StartPlaying() != B_OK) { 75 printf("cannot start playback\n"); 76 return 1; 77 } 78 79 getchar(); 80 81 pushGameSound.StopPlaying(); 82 83 printf("\nfinished.\n"); 84 85 return 0; 86} 87