Sinuston in höheren Frequenzen erzeugen?

  • Antworten:0
Abba Babba
  • Forum-Beiträge: 4

12.01.2014, 16:36:53 via Website

Guten Tag,

ich möchte eine App zur Ermittlung der Hörschwelle eines Menschen programmieren. Dazu sollen Sinustöne in unterschiedlichen Frequenzen erzeugt werden. Mit Zuhilfenahme des Internets bin ich zu unten stehendem Code gekommen. Dieser funktioniert sogar! Allerdings ist es mir nicht möglich, zu höheren Frequenzen als ca. 3000hz zu kommen. Die angestrebten Frequenzen befinden sich im >10khz-Bereich.

Habt ihr vielleicht Lösungsvorschläge oder gar einen einfach besseren Code für mich, wodurch ich diese Aufgabenstellung lösen könnte? Für jegliche Antworten bin ich überaus dankbar.


public void v_Play(int int_Frequence, int int_Duration)
{
int int_SampleRate = 8000;
int int_Samples = int_SampleRate * int_Duration;
double dou_Sample[] = new double[int_Samples];
final byte by_Sound[] = new byte[2 * int_Samples];

for (int i = 0; i < int_Samples; ++i) {
dou_Sample[i] = Math.sin(2 * Math.PI * i / (int_SampleRate/int_Frequence));
}

int idx = 0;
for (double dVal : dou_Sample) {
short val = (short) (dVal * 32767);
by_Sound[idx++] = (byte) (val & 0x00ff);
by_Sound[idx++] = (byte) ((val & 0xff00) >>> 8);
}

AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, int_Samples,
AudioTrack.MODE_STATIC);
audioTrack.write(by_Sound, 0, int_Samples);
audioTrack.play();

}

Antworten