2010-09-03 14 views
21

Esiste un'API solo per l'audio?API cross platform per i giochi?

API come Allegro o SDL forniscono troppo per le mie esigenze. Ho semplicemente bisogno di una libreria che può fare qualcosa di simile:

InitSound(); 
Sound *door = LoadSound("door.wav"); 
PlaySound(door,volume); 

Sarebbe anche bello se si potesse supportare formati compressi come Vorbis o MP3.

risposta

18

Sono un grande fan della libreria SFML. Fornisce grafica e funzionalità di rete aggiuntive, ma ciò che è rilevante per questa domanda, è che ha anche un pacchetto audio pulito.

caratteristiche audio sono:

  • utilizza l'accelerazione hardware quando possibile
  • possibile caricare e salvare i formati audio standard: Ogg, WAV, FLAC, AIFF, Au, RAW, paf, 8SVX, NIST, VOC , IRCAM, W64, MAT4, MAT5 PVF, HTK, SDS, AVR, SD2, Core Audio Format, WVE, MPC2K, RF64
  • Impossibile caricare tutte le risorse audio direttamente da file in memoria
  • spazializzazione del suono 3D
  • Interfaccia facile per la cattura dell'audio
  • gestisce la memoria in modo efficiente, in modo che non ci si deve preoccupare circa la durata delle risorse o l'archiviazione
  • Supporta lo streaming per i file di grandi dimensioni; si può anche scrivere la vostra classe di streaming personalizzata per qualsiasi sorgente (di rete, ...)
  • Supporta formati multi-canali (mono, stereo, 4.0, 5.1, 6.1, 7,1)

Sito web: http://www.sfml-dev.org/

+2

Boooo, mi hai battuto di un minuto. Ma sì, SFML è fantastico. – Dragontamer5788

+4

Leggi il mio commento sulla risposta a graham.reeds. SFML include librerie per suoni con licenza lgpl e molti rischi potenziali con il codice di licenza gpl. Avrei usato SFML per il mio gioco, ma a differenza delle persone del software libero (che sembrano già ricchi o che hanno altri che pagano le bollette), vorrei mantenere il mio duro lavoro riservato oltre ogni ragionevole dubbio. Solo qualche spunto di riflessione. –

+0

@TechnikEmpire: devi essere confuso; LGPL! = GPL. è possibile utilizzare una libreria su progetti di origine chiusi. l'unico vincolo è che tu fornisca qualche avviso di licenza da qualche parte. –

11

Utilizzare PortAudio. È un'API audio cross-platform portatile.

+0

L'ho usato anch'io - era molto semplice da integrare nel mio progetto. –

8

Se si utilizza OpenGL, è possibile provare OpenAL?

L'API è molto simile a OpenGL quindi dovresti sentirti a casa.

+0

Buon punto, anzi! –

+0

OpenAL è come OpenGL. È un'API guidata più o meno da un'azienda, e anche questa "unità" non è più lì da poco. Mentre il design dell'API è bello, la disponibilità su varie piattaforme non è buona. La sua implementazione di Windows è piena di stranezze e bug, esp. con HW (incluso Creative HW). – Suma

+0

Originariamente è stato avviato molti anni fa (iirc) da Sean Palmer (insieme a OpenML e un paio di altri), ma solo OpenAL ha guadagnato slancio. Ha trovato il favore su Linux ed è stato utilizzato in maggio porte di giochi Windows a Linux da giochi Loki. La fine di Loki (e argubamente Linux come piattaforma di giochi redditizia) ha ucciso OpenAL, non Creative. La mia esperienza in questo campo risale a diversi anni e all'epoca sembrava ok e funzionava bene per semplici test audio. –

3

Mi piace molto SFML, è scritto in C++ e segue la maggior parte delle regole di buona progettazione dell'API (RAII e così via).

Se si preferisce una libreria più simile a "C", è necessario menzionare SDL.

2

SDL_sound è molto semplice da usare e gestisce la decodifica per te. Se hai usato OpenAL, dovresti eseguire personalmente la decodifica (l'ultima volta l'ho usata comunque). In realtà preferisco OpenAL per i giochi, però.

+0

L'ho usato e racchiuso nel mio motore di gioco di carne in 2D, ma ho avuto sorprese da tempo a tempo su una relazione valgrind; o suonano rumorosamente la seconda volta che si suona ... Non lo consiglierei oggi. –

1

Se sei alla ricerca di un'API di progettazione audio cross-platform professionale e di un'applicazione di authoring, dai uno sguardo allo Audiokinetic Wwise. Può fare molto di più che suonare solo i suoni.Ha effetti, sistema di suoni complessi, strati sonori, profili, strumenti musicali interattivi, ecc ... Fornisce il supporto Ogg Vorbis e MP3 ed è gratuito per progetti non commerciali.

1

Si consiglia di dare un'occhiata allo Kowalski project, un'API audio multipiattaforma orientata verso giochi e applicazioni interattive simili. È rilasciato sotto la licenza zlib.

+0

"attualmente in fase di refactoring, non ancora abbastanza utilizzabile", ma nessun commit per gli ultimi 8 mesi. – Justin

0

Prova libaohttp://www.xiph.org/ao/ - il suo molto semplice & supporta varietà di piattaforme. L'ho provato su un raspberry pi con successo.

+0

libao è GPL, non LGPL. – Justin

1

Anche se è gratuito solo per applicazioni non commerciali, Bass è davvero facile da implementare.

Esempio di utilizzo:

// initialize device at 44kHz 
if (!BASS_Init(-1,44100,0,0,NULL)) 
{ 
    printf("Can't initialize device"); 
    return 0; 
} 

HSAMPLE sample; 
HCHANNEL channel; 

// load from disk 
if(sample = BASS_SampleLoad(FALSE,"foo.wav",0,0,1,BASS_SAMPLE_OVER_POS)) { 

    // get playable channel 
    channel = BASS_SampleGetChannel(sample,FALSE); 

    // play 
    BASS_ChannelPlay(channel,TRUE); 

    // wait for playback to finish 
    while(BASS_ChannelIsActive(channel)) 
     Sleep(100); 

    BASS_SampleFree(sample); 
} 

// cleanup 
BASS_Free(); 
1

Considerare libsoundio. Non supporta compressione o codec, ma fornisce una solida API audio cross-platform. Potrebbe essere un po 'di basso livello per i tuoi bisogni; la libreria che stai cercando potrebbe essere costruita su libsoundio.

1

Lo so che è una vecchia questione, ma chiunque inciampo su questo ora potrebbe effettuare il check out FMOD

È possibile utilizzare l'API di basso livello per iniziare semplice poi fare uso delle caratteristiche più potenti (e FMOD Studio) più tardi, se necessario.

Ecco il documentation per la riproduzione di un suono, che fa riferimento i campioni nelle API:

Questo esempio mostra come caricare e riprodurre più suoni, la semplice utilizzo di FMOD semplicemente.

Ho usato questa API di basso livello per un clone di Space Invaders multipiattaforma (Mac, Windows) che ho sviluppato e l'ho trovato molto utile!