Abba Babba
- Forum-Beiträge: 4
12.01.2014, 16:36:53 via Website
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();
}
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();
}
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.