LMMS
Loading...
Searching...
No Matches
AudioAlsa.h
Go to the documentation of this file.
1/*
2 * AudioAlsa.h - device-class that implements ALSA-PCM-output
3 *
4 * Copyright (c) 2004-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
5 *
6 * This file is part of LMMS - https://lmms.io
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program (see COPYING); if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301 USA.
22 *
23 */
24
25#ifndef LMMS_AUDIO_ALSA_H
26#define LMMS_AUDIO_ALSA_H
27
28#include "lmmsconfig.h"
29
30#ifdef LMMS_HAVE_ALSA
31
32// older ALSA-versions might require this
33#define ALSA_PCM_NEW_HW_PARAMS_API
34
35#include <alsa/asoundlib.h>
36#include <QThread>
37
38#include "AudioDevice.h"
39
40namespace lmms
41{
42
43class AudioAlsa : public QThread, public AudioDevice
44{
45 Q_OBJECT
46public:
51 {
52 public:
53 DeviceInfo(QString const & deviceName, QString const & deviceDescription) :
54 m_deviceName(deviceName),
55 m_deviceDescription(deviceDescription)
56 {}
57 ~DeviceInfo() = default;
58
59 QString const & getDeviceName() const { return m_deviceName; }
60 QString const & getDeviceDescription() const { return m_deviceDescription; }
61
62 private:
63 QString m_deviceName;
65
66 };
67
68 using DeviceInfoCollection = std::vector<DeviceInfo>;
69
70public:
71 AudioAlsa( bool & _success_ful, AudioEngine* audioEngine );
72 ~AudioAlsa() override;
73
74 inline static QString name()
75 {
76 return QT_TRANSLATE_NOOP( "AudioDeviceSetupWidget",
77 "ALSA (Advanced Linux Sound Architecture)" );
78 }
79
80 static QString probeDevice();
81
83
84private:
85 void startProcessing() override;
86 void stopProcessing() override;
87 void run() override;
88
89 int setHWParams( const ch_cnt_t _channels, snd_pcm_access_t _access );
90 int setSWParams();
91 int handleError( int _err );
92
93
94 snd_pcm_t * m_handle;
95
96 snd_pcm_uframes_t m_bufferSize;
97 snd_pcm_uframes_t m_periodSize;
98
99 snd_pcm_hw_params_t * m_hwParams;
100 snd_pcm_sw_params_t * m_swParams;
101
103
104} ;
105
106} // namespace lmms
107
108#endif // LMMS_HAVE_ALSA
109
110#endif // LMMS_AUDIO_ALSA_H
QString const & getDeviceDescription() const
Definition AudioAlsa.h:60
DeviceInfo(QString const &deviceName, QString const &deviceDescription)
Definition AudioAlsa.h:53
QString const & getDeviceName() const
Definition AudioAlsa.h:59
QString m_deviceDescription
Definition AudioAlsa.h:64
QString m_deviceName
Definition AudioAlsa.h:63
void run() override
Definition AudioAlsa.cpp:242
int setHWParams(const ch_cnt_t _channels, snd_pcm_access_t _access)
Definition AudioAlsa.cpp:317
AudioAlsa(bool &_success_ful, AudioEngine *audioEngine)
Definition AudioAlsa.cpp:37
snd_pcm_sw_params_t * m_swParams
Definition AudioAlsa.h:100
static QString probeDevice()
Definition AudioAlsa.cpp:120
snd_pcm_uframes_t m_bufferSize
Definition AudioAlsa.h:96
int handleError(int _err)
Definition AudioAlsa.cpp:190
void stopProcessing() override
Definition AudioAlsa.cpp:237
snd_pcm_hw_params_t * m_hwParams
Definition AudioAlsa.h:99
snd_pcm_t * m_handle
Definition AudioAlsa.h:94
bool m_convertEndian
Definition AudioAlsa.h:102
~AudioAlsa() override
Definition AudioAlsa.cpp:98
snd_pcm_uframes_t m_periodSize
Definition AudioAlsa.h:97
static QString name()
Definition AudioAlsa.h:74
int setSWParams()
Definition AudioAlsa.cpp:416
std::vector< DeviceInfo > DeviceInfoCollection
Definition AudioAlsa.h:68
static DeviceInfoCollection getAvailableDevices()
Creates a list of all available devices.
Definition AudioAlsa.cpp:151
void startProcessing() override
Definition AudioAlsa.cpp:226
AudioEngine * audioEngine()
Definition AudioDevice.h:121
AudioDevice(const ch_cnt_t _channels, AudioEngine *audioEngine)
Definition AudioDevice.cpp:33
Definition AudioEngine.h:66
Definition AudioAlsa.cpp:35
std::uint16_t ch_cnt_t
Definition LmmsTypes.h:44