Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : midi ausgabe mittels c



jamba
18-10-2003, 15:14
ich möchte in linux ein c programm schreiben, dass mir midi "töne" ausgibt.
ich habe folgenden quellcode, der ohne errors oder warnings compiliert. aber ich höre keinen sound. ich glaube, dass es nicht an dem source file liegt, sondern an irgendetwas system technischen, denn ich kann midi files nur mittels kmidi abspielen, und da rauscht es ziemlich. weiss jemand rat?

#include <linux/soundcard.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main(void) {
char* device = "/dev/midi" ;
unsigned char data[3] = {0x90, 60, 127};
// step 1: open the OSS device for writing
int fd = open(device, O_WRONLY, 0);
if (fd < 0) {
printf("Error: cannot open %s\n", device);
exit(1);
}
// step 2: write the MIDI information to the OSS device
write(fd, data, sizeof(data));
// step 3: (optional) close the OSS device
close(fd);
return 0;
}

DanDanger
18-10-2003, 18:56
Hi,

"normale" Soundkarten (nicht die Profi-Musiker-Teile für mehrere 1.000 €)
haben keine "echte" MIDI-Schnittstelle.
Unter Windows wird die dann halt von den Soundkartentreibern Emuliert (die haben dann ein Sogennantes "Wavetable", also eine Liste aller Instrumente samt Tönen in Software realisiert).

Unter Linux musst du erst eine "virtuelle" MIDI-Soundkarte Installieren.
Schau mal unter http://www.Linuxforen.de unter [Musik], da wird das alles nochmal ganz genau erklärt.

Gruss
DanDanger

oracle2025
20-10-2003, 10:53
genauer gesagt:

http://www.linuxforen.de/forums/showthread.php?threadid=85307

jamba
22-10-2003, 08:05
das nützt mir gar nix. leider. trotzdem danke.

mit timidity kann ich ganz normale midi files abspielen. ok. aber ich möchte in meinem programm die midi messages "direkt" an die midi schnittstelle schicken. nicht über irgendein tool, wie timidity usw. sondern direkt an die schnittstelle /dev/midi00.

trotzdem danke

oracle2025
22-10-2003, 08:34
kann timidity auch von der standardeingabe lesen im Midi abzuspielen?
dann könntest du so nämlich tmidity mit deinen Daten füttern.

jamba
26-10-2003, 21:46
versteh ich nicht ganz was du meinst.

ich habe ein c program, und möchte mittels eines befehls daten an die midi schnittstelle schicken. wie soll ich da timidity einbinden?

DanDanger
27-10-2003, 01:06
Hi,



mit timidity kann ich ganz normale midi files abspielen. ok. aber ich möchte in meinem programm die midi messages "direkt" an die midi schnittstelle schicken. nicht über irgendein tool, wie timidity usw. sondern direkt an die schnittstelle /dev/midi00.


du kommst aber um die Installation einer "virtuellen" MIDI-Soundkarte (oder um die Benutzung irgendwelcher Tools) nicht drumherum.

Das Problem ist : Deine Soundkarte "versteht" keine direkten MIDI-Befehle (unter Windows wird die MIDI-Ausgabe ja auch nur von den Treibern emuliert).

Erst wenn du die deine MIDI-Soundkarte + Wavetable installiert hast, kannst du über /dev/midi MIDI-Files ausgeben

Gruss
DanDanger

oracle2025
27-10-2003, 06:32
Im aktuellen Linux-User Magazin sind einige Artikel zum Thema Linux, Sound und Midi.
Vielleicht findest da ja was.

Oder du schaust dir mal Fluidsynth an:
http://www.fluidsynth.org/

der macht angeblich folgendes:

FluidSynth is a real-time software synthesizer based on the SoundFont 2 specifications. It is a "software synthesizer". FluidSynth can read MIDI events from the MIDI input device and render them to the audio device. It can also play MIDI files.