Seite 1 von 1

RtAudio und STK unter Qt 4.3.4 (Windows) einbinden

Verfasst: 18. März 2008 18:11
von oberschlingel
Hallo,

ich hänge schon länger an einem Problem und wäre für Ratschläge von euch sehr dankbar!

Oberstes Ziel
Eine Qt-Oberfläche mit einem Button. Drückt man darauf, sollen Audiosignale über das Mikrofon in eine wav-Datei geschrieben werden.

Geplante Umgebung
- Qt 4.3.4
- MinGW 5.1.3
- RtAudio 4.0.4 (Audio-API um das Mikrofon anzusteuern und Daten in einen Buffer zu schreiben)
- STK 4.3.1 (Tookit um die Daten des Buffers in eine wav-Datei zu schreiben)

Vorarbeit
Leider kenne ich mich nur bedingt mit dem Einbinden externer Bibiotheken aus. Wenn ich es richtig sehe, sind für RtAudio und STK ja auch keine DLL- bzw. LIB-Bibliotheken, sondern Headerdateien einzubinden. (?)

Ich bin wie folgt vorgegangen und habe es im ersten Schritt nach langer Zeit und vielen komischen Einträgen in der pro-Datei auch erreicht, zumindest RtAudio zum Laufen zu bringen. Nachfolgende rttest.pro und main.cpp spielen zumindest einen komischen Ton ab:

rttest.pro

Code: Alles auswählen

TEMPLATE 	= 	app
DEFINES 	+= 	__WINDOWS_DS__
DEFINES 	-= 	UNICODE 
DEPENDPATH 	+= 	.
INCLUDEPATH 	+= 	.
INCLUDEPATH 	+= 	./include
LIBS 		+= 	c:/rttest/dsound.lib
LIBS		+=	c:/mingw/lib/libole32.a
LIBS		+=	c:/mingw/lib/libwinmm.a
CONFIG 		+= 	qt warn_on release
HEADERS 	+= 	RtAudio.h
SOURCES 	+= 	RtAudio.cpp
SOURCES 	+= 	main.cpp
main.cpp

Code: Alles auswählen

#include <QtGui>
#include <QApplication>
#include <QPushButton>
#include "RtAudio.h"
#include <iostream>
#include <dsound.h>

int saw( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData ) {
  unsigned int i, j;
  double *buffer = (double *) outputBuffer;
  double *lastValues = (double *) userData;
  if ( status )
    std::cout << "Stream underflow detected!" << std::endl;

  // Write interleaved audio data.
  for ( i=0; i<nBufferFrames; i++ ) {
    for ( j=0; j<2; j++ ) {
      *buffer++ = lastValues[j];

      lastValues[j] += 0.005 * (j+1+(j*0.1));
      if ( lastValues[j] >= 1.0 ) lastValues[j] -= 2.0;
    }
  }
  return 0;
}

int main(int argc, char *argv[]) {
  QApplication app(argc, argv);

  RtAudio dac;
  if ( dac.getDeviceCount() < 1 ) {
    setMessage("\nNo audio devices found!\n");
    exit( 0 );
  }

  RtAudio::StreamParameters parameters;
  parameters.deviceId = dac.getDefaultOutputDevice();
  parameters.nChannels = 2;
  parameters.firstChannel = 0;
  unsigned int sampleRate = 44100;
  unsigned int bufferFrames = 256; // 256 sample frames
  double data[2];

  try {
    dac.openStream( &parameters, NULL, RTAUDIO_FLOAT64,
                    sampleRate, &bufferFrames, &saw, (void *)&data );
    dac.startStream();
  }
  catch ( RtError& e ) {
    exit( 0 );
  }

  QPushButton hello("Hallo");
  hello.resize(400, 30);
  hello.show();
  return app.exec();
}
Problemstellung
Wie gehe ich nun aber vor, um auch STK nutzen zu können??? Wenn ich STK herunterlade, weiß ich überhaupt nicht, wie ich das ganze einbinden soll. Ich wollte zuerst auch mal nur die Beipiele mit MinGW kompilieren, aber ich habe keine Ahnung, wo ich die Dateien ablege und wie ich sie verwende. Das configure-Skript wüßte ich auch nicht, wie ich ausführen soll. Und wozu ist es genau?

Ich fände es ganz toll, wenn mir jemand kurz erläutern könnte, welche Schritte notwendig sind, um das gesamte Paket, bestehend aus RtAudio und STK, in Qt einzubinden und vollständig verwenden zu können.
Wie gesagt, ich möchte eigentlich "nur" das Mikro aufzeichnen mit RtAudio und in eine wav-Datei speichern mit STK (über FileWvOut).

Vielen Dank,
verzweifelter Oberschlingel

Verfasst: 19. März 2008 14:10
von Christian81
Da wir hier ein Qt-Forum sind glaube ich nicht dass Dir jemand mit STK (was auch immer das ist ;) ) helfen kann...