blob: 2f6b639c49ca2c5b4078e98272d768c067814dfb (
plain)
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
|
#pragma once
#include <string>
#include <cmath>
#include <cstdint>
#include <cstddef>
#define NUMOF(l) (sizeof(l) / sizeof(*l))
#define linear_to_dB(x) (log10(x) * 20)
/*! Calculate the little string containing a bargraph
* 'VU-meter' from the peak value measured
*/
const char* level(int channel, int peak);
size_t strlen_utf8(const char *s);
struct ICY_TEXT_t {
std::string artist;
std::string title;
std::string now_playing;
operator bool() const {
return not (artist.empty() and title.empty() and now_playing.empty());
}
bool operator==(const ICY_TEXT_t& other) const {
return
artist == other.artist and
title == other.title and
now_playing == other.now_playing;
}
bool operator!=(const ICY_TEXT_t& other) const {
return !(*this == other);
}
void useArtistTitle(const std::string& artist, const std::string& title) {
this->artist = artist;
this->title = title;
now_playing = "";
}
void useNowPlaying(const std::string& now_playing) {
artist = "";
title = "";
this->now_playing = now_playing;
}
};
/*! Write the corresponding text to a file readable by ODR-PadEnc, with optional
* DL+ information. The text is passed as a copy because we actually use the
* m_nowplaying variable which is also accessed in another thread, so better
* make a copy.
*
* \return false on failure
*/
bool write_icy_to_file(const ICY_TEXT_t text, const std::string& filename, bool dl_plus);
|