Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1562 | Anzahl registrierter User: 1893 | Besucher online: 120
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Audioaufzeichnung unter Linux


Autor: Vertexwahn
Sprache: C++
Bewertung:
noch nicht bewertet
Anzahl der Aufrufe: 4922
  
Kick it on dotnet-kicks.de  

Beschreibung:

Zeichnet in Linux ein Audiosignal vom Standard-Audioinput auf, speicher es in einen char-Puffer und spielt es anschließend wieder ab

Quelle: http://www.c-plusplus.de/forum/viewtopic-var-t-is-217635.html


Abgelegt unter: Audio, Linux.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using namespace std; 

#define CHANNELS  1 
#define RATE      16000  // sampling rate! 
#define AFMT      AFMT_S16_LE 
#define FRAG      0x7fff000b 

static int fd; 

int openAudio(int mode) 
{ 
    int mask; 
    int channelsT = CHANNELS; 
    int rateT     = RATE; 
    int afmtT     = AFMT; 
    int frag      = FRAG; 

    /***** open audio device /dev/dsp*/ 

    if ((fd = open("/dev/dsp", mode, 0)) == -1) 
    { 
        return(-1); 
    } 

    /***** check whether 16 bit recording is possible on the current sound hardware */ 

    if (ioctl(fd, SNDCTL_DSP_GETFMTS, &mask) == -1) 
    { 
        return(-1); 
    } 
  
    if (!(mask & AFMT)) 
    { 
        return(-1); 
    } 

    /***** set audio recording to 16kHz, 16bit, mono */ 

    if (ioctl(fd, SNDCTL_DSP_SETFMT, &afmtT)      == -1 || 
        afmtT != AFMT                                   || 
        ioctl(fd, SNDCTL_DSP_CHANNELS, &channelsT)== -1 || 
        channelsT != CHANNELS                           || 
        ioctl(fd, SNDCTL_DSP_SPEED, &rateT)       == -1 || 
        rateT != RATE                                   || 
        ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &frag)  == -1) 
    { 
        return(-1); 
    } 

    return(1); 
} 

int closeAudio() 
{   
    close(fd);   
    return(1); 
} 

int playUtterance(unsigned char *wav, long length) 
{ 
    fprintf(stderr, "I write %d bytes\n",length); 
    write(fd, wav, length); 
    return(1); 
} 

unsigned char *getUtterance(long length) 
{ 
    int i;int n;int retval; 
    unsigned char * buffer_raw; 
    buffer_raw =(unsigned char *) malloc(sizeof(unsigned char)*length); 
  
    memset (buffer_raw, 0x00, length); 

    fprintf(stderr, "I read %d bytes\n",length); 
    if ((retval = read(fd, buffer_raw, length)) == -1) 
    { 
        return NULL; 
    } 
    fprintf(stderr, "I got %d bytes\n",retval); 
    return buffer_raw; 
} 


int main() 
{ 
    unsigned char * buffer; 
    // read 
    if (openAudio( O_RDONLY) > 0) { 
        fprintf(stderr, "audio opened.\n"); 
    } 
    long nb = 128000; // number of bytes to read... 
    buffer = getUtterance(nb); 
    closeAudio(); 
    if (openAudio(O_WRONLY) > 0) { 
        fprintf(stderr, "audio opened.\n"); 
    } 
    playUtterance(buffer, nb ); 
    closeAudio(); 
    return 0; 
} 
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)



schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.