Compare commits
33 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0f1b77dae8 | ||
|
|
7eef227154 | ||
|
|
bddea666f5 | ||
|
|
ed0198a7c2 | ||
|
|
f16bb13271 | ||
|
|
18db18c34d | ||
|
|
1bb1052925 | ||
|
|
211c082d91 | ||
|
|
3049a6bd04 | ||
|
|
6196925915 | ||
|
|
92a578c6a7 | ||
|
|
e6d21f1d10 | ||
|
|
dfafd22ec5 | ||
|
|
be32b990f8 | ||
|
|
09885c3403 | ||
|
|
0965f79bc1 | ||
|
|
73ffc047e8 | ||
|
|
919697d3b2 | ||
|
|
583ac1c708 | ||
|
|
7af20f70e0 | ||
|
|
7e209cd739 | ||
|
|
c709aedb9a | ||
|
|
28cff95ffc | ||
|
|
b9c407a918 | ||
|
|
1a3d05eae9 | ||
|
|
66fee3eb55 | ||
|
|
6472bcde65 | ||
|
|
3562e0fb1f | ||
|
|
d348615dee | ||
|
|
27cdcb61bf | ||
|
|
3b1926a8d5 | ||
|
|
36e309cbe7 | ||
|
|
f2e123efd5 |
33 changed files with 13051 additions and 239 deletions
|
|
@ -61,6 +61,7 @@ enum codec_status codec_run(void)
|
|||
int file_offset;
|
||||
int framelength;
|
||||
int lead_trim = 0;
|
||||
unsigned int frame_samples;
|
||||
unsigned int i;
|
||||
unsigned char* buffer;
|
||||
NeAACDecFrameInfo frame_info;
|
||||
|
|
@ -214,13 +215,15 @@ enum codec_status codec_run(void)
|
|||
/* Output the audio */
|
||||
ci->yield();
|
||||
|
||||
frame_samples = frame_info.samples >> 1;
|
||||
|
||||
if (empty_first_frame)
|
||||
{
|
||||
/* Remove the first frame from lead_trim, under the assumption
|
||||
* that it had the same size as this frame
|
||||
*/
|
||||
empty_first_frame = false;
|
||||
lead_trim -= (frame_info.samples >> 1);
|
||||
lead_trim -= frame_samples;
|
||||
|
||||
if (lead_trim < 0)
|
||||
{
|
||||
|
|
@ -229,11 +232,30 @@ enum codec_status codec_run(void)
|
|||
}
|
||||
|
||||
/* Gather number of samples for the decoded frame. */
|
||||
framelength = (frame_info.samples >> 1) - lead_trim;
|
||||
framelength = frame_samples - lead_trim;
|
||||
|
||||
if (i == demux_res.num_sample_byte_sizes - 1)
|
||||
{
|
||||
framelength -= ci->id3->tail_trim;
|
||||
// Size of the last frame
|
||||
const uint32_t sample_duration = (demux_res.num_time_to_samples > 0) ?
|
||||
demux_res.time_to_sample[demux_res.num_time_to_samples - 1].sample_duration :
|
||||
frame_samples;
|
||||
|
||||
/* Currently limited to at most one frame of tail_trim.
|
||||
* Seems to be enough.
|
||||
*/
|
||||
if (ci->id3->tail_trim == 0 && sample_duration < frame_samples)
|
||||
{
|
||||
/* Subtract lead_trim just in case we decode a file with only
|
||||
* one audio frame with actual data (lead_trim is usually zero
|
||||
* here).
|
||||
*/
|
||||
framelength = sample_duration - lead_trim;
|
||||
}
|
||||
else
|
||||
{
|
||||
framelength -= ci->id3->tail_trim;
|
||||
}
|
||||
}
|
||||
|
||||
if (framelength > 0)
|
||||
|
|
@ -241,6 +263,10 @@ enum codec_status codec_run(void)
|
|||
ci->pcmbuf_insert(&decoder->time_out[0][lead_trim],
|
||||
&decoder->time_out[1][lead_trim],
|
||||
framelength);
|
||||
sound_samples_done += framelength;
|
||||
/* Update the elapsed-time indicator */
|
||||
elapsed_time = (sound_samples_done * 10) / (ci->id3->frequency / 100);
|
||||
ci->set_elapsed(elapsed_time);
|
||||
}
|
||||
|
||||
if (lead_trim > 0)
|
||||
|
|
@ -253,7 +279,7 @@ enum codec_status codec_run(void)
|
|||
empty_first_frame = true;
|
||||
}
|
||||
|
||||
lead_trim -= (frame_info.samples >> 1);
|
||||
lead_trim -= frame_samples;
|
||||
|
||||
if (lead_trim < 0)
|
||||
{
|
||||
|
|
@ -261,11 +287,7 @@ enum codec_status codec_run(void)
|
|||
}
|
||||
}
|
||||
|
||||
/* Update the elapsed-time indicator */
|
||||
sound_samples_done += framelength;
|
||||
elapsed_time = (sound_samples_done * 10) / (ci->id3->frequency / 100);
|
||||
ci->set_elapsed(elapsed_time);
|
||||
i++;
|
||||
++i;
|
||||
}
|
||||
|
||||
LOGF("AAC: Decoded %lu samples\n", (unsigned long)sound_samples_done);
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ enum codec_status codec_run(void)
|
|||
fs = rmctx.audio_framesize;
|
||||
sps= rmctx.block_align;
|
||||
h = rmctx.sub_packet_h;
|
||||
scrambling_unit_size = h*fs;
|
||||
scrambling_unit_size = h * (fs + PACKET_HEADER_SIZE);
|
||||
|
||||
res = atrac3_decode_init(&q, ci->id3);
|
||||
if(res < 0) {
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ enum codec_status codec_run(void)
|
|||
fs = rmctx.audio_framesize;
|
||||
sps= rmctx.block_align;
|
||||
h = rmctx.sub_packet_h;
|
||||
scrambling_unit_size = h*fs;
|
||||
scrambling_unit_size = h * (fs + PACKET_HEADER_SIZE);
|
||||
|
||||
res =cook_decode_init(&rmctx, &q);
|
||||
if(res < 0) {
|
||||
|
|
|
|||
|
|
@ -541,8 +541,9 @@ int rm_get_packet(uint8_t **src,RMContext *rmctx, RMPacket *pkt)
|
|||
if (!y)
|
||||
rmctx->audiotimestamp = pkt->timestamp;
|
||||
|
||||
advance_buffer(src,12);
|
||||
consumed += 12;
|
||||
/* Skip packet header */
|
||||
advance_buffer(src, PACKET_HEADER_SIZE);
|
||||
consumed += PACKET_HEADER_SIZE;
|
||||
if (rmctx->codec_type == CODEC_COOK || rmctx->codec_type == CODEC_ATRAC) {
|
||||
for(x = 0 ; x < w/sps; x++)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,7 +28,8 @@
|
|||
#include "spc_profiler.h"
|
||||
|
||||
#if defined(CPU_COLDFIRE) || defined (CPU_ARM)
|
||||
int32_t fir_buf[FIR_BUF_CNT] IBSS_ATTR_SPC MEM_ALIGN_ATTR;
|
||||
int32_t fir_buf[FIR_BUF_CNT] IBSS_ATTR_SPC
|
||||
__attribute__((aligned(FIR_BUF_ALIGN*1)));
|
||||
#endif
|
||||
#if SPC_BRRCACHE
|
||||
/* a little extra for samples that go past end */
|
||||
|
|
@ -1276,6 +1277,8 @@ void DSP_run_( struct Spc_Dsp* this, long count, int32_t* out_buf )
|
|||
/* Feedback into echo buffer */
|
||||
if ( !(this->r.g.flags & 0x20) )
|
||||
{
|
||||
int sh = 1 << 9;
|
||||
|
||||
asm volatile (
|
||||
/* scale echo voices; saturate if overflow */
|
||||
"mac.l %[sh], %[e1] , %%acc1 \r\n"
|
||||
|
|
@ -1298,11 +1301,10 @@ void DSP_run_( struct Spc_Dsp* this, long count, int32_t* out_buf )
|
|||
"or.l %[sh], %[e0] \r\n"
|
||||
/* save final feedback into echo buffer */
|
||||
"move.l %[e0], (%[echo_ptr]) \r\n"
|
||||
: [e0]"+d"(echo_0), [e1]"+d"(echo_1)
|
||||
: [e0]"+d"(echo_0), [e1]"+d"(echo_1), [sh]"+d"(sh)
|
||||
: [out_0]"r"(out_0), [out_1]"r"(out_1),
|
||||
[ef]"r"((int)this->r.g.echo_feedback),
|
||||
[echo_ptr]"a"((int32_t *)echo_ptr),
|
||||
[sh]"d"(1 << 9)
|
||||
[echo_ptr]"a"((int32_t *)echo_ptr)
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ enum codec_status codec_run(void)
|
|||
* sample seek position from the file offset, the sampling frequency and
|
||||
* the bitrate. As the saved position is exactly calculated the reverse way
|
||||
* there is no loss of information except rounding. */
|
||||
samplesdone = 100 * ((mpc_uint64_t)(ci->id3->offset * frequency) / byterate);
|
||||
samplesdone = 100 * (((mpc_uint64_t)ci->id3->offset * frequency) / byterate);
|
||||
|
||||
/* Set up digital signal processing for correct number of channels */
|
||||
/* NOTE: current musepack format only allows for stereo files
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ dansk.lang
|
|||
deutsch.lang
|
||||
eesti.lang
|
||||
english.lang
|
||||
english-us.lang
|
||||
espanol.lang
|
||||
esperanto.lang
|
||||
finnish.lang
|
||||
|
|
|
|||
|
|
@ -8018,6 +8018,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Building database... %d found (LEFT to return)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)"
|
||||
gogearsa9200: "Building database... %d found (REW to return)"
|
||||
archosplayer: "Building DB %d found"
|
||||
</source>
|
||||
<dest>
|
||||
*: "数据库更新中...已找到%d个(按OFF键返回)"
|
||||
|
|
@ -8026,6 +8027,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "数据库更新中...已找到%d个(按LEFT键返回)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "数据库更新中...已找到%d个(按PREV键返回)"
|
||||
gogearsa9200: "数据库更新中...已找到%d个(按REW键返回)"
|
||||
archosplayer: "数据库更新中...已找到%d个"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "数据库更新中"
|
||||
|
|
@ -9244,19 +9246,16 @@
|
|||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HEADPHONE_UNPLUG_RW
|
||||
desc: in pause_phones_menu.
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: none
|
||||
headphone_detection: "Duration to Rewind"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: none
|
||||
headphone_detection: "倒回长度"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: none
|
||||
headphone_detection: "倒回长度"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
|
|
@ -12645,19 +12644,33 @@
|
|||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_RECORDING_HISTOGRAM_INTERVAL
|
||||
id: LANG_PAUSE_REWIND
|
||||
desc: Seconds to rewind when rewind on pause is enabled.
|
||||
user: core
|
||||
<source>
|
||||
*: "Rewind on Pause"
|
||||
</source>
|
||||
<dest>
|
||||
*: "暂停后倒回"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "暂停后倒回"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTOGRAM_INTERVAL
|
||||
desc: in record settings menu
|
||||
user: core
|
||||
<source>
|
||||
*: none
|
||||
recording_histogram: "Histogram interval"
|
||||
histogram: "Histogram interval"
|
||||
</source>
|
||||
<dest>
|
||||
*: none
|
||||
recording_histogram: "柱状图间隔"
|
||||
histogram: "直方图区间"
|
||||
</dest>
|
||||
<voice>
|
||||
*: none
|
||||
recording_histogram: "柱状图间隔"
|
||||
histogram: "直方图区间"
|
||||
</voice>
|
||||
</phrase>
|
||||
|
|
|
|||
|
|
@ -8400,6 +8400,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Building database... %d found (LEFT to return)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)"
|
||||
gogearsa9200: "Building database... %d found (REW to return)"
|
||||
archosplayer: "Building DB %d found"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Bygger database... %d fundet (SLUK for at stoppe)"
|
||||
|
|
@ -8408,13 +8409,10 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Bygger database... %d fundet (VENSTRE for at stoppe)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Bygger database... %d fundet (FORRIGE for at stoppe)"
|
||||
gogearsa9200: "Bygger database... %d fundet (SPOL TILBAGE for at stoppe)"
|
||||
archosplayer: "Bygger DB %d fundet"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "filer fundet til databasen"
|
||||
iriverh100,iriverh120,iriverh300: ""
|
||||
ipod*: ""
|
||||
iaudiox5,iaudiom5,gigabeat*,mrobe100: ""
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,gogearsa9200: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
|
|
@ -9885,19 +9883,16 @@
|
|||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HEADPHONE_UNPLUG_RW
|
||||
desc: in pause_phones_menu.
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: none
|
||||
headphone_detection: "Duration to Rewind"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: none
|
||||
headphone_detection: "Spol tilbage"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: none
|
||||
headphone_detection: "Spol tilbage"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
|
|
@ -12683,3 +12678,17 @@
|
|||
*: "Kun i brugerdefinerede mapper"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PAUSE_REWIND
|
||||
desc: Seconds to rewind when rewind on pause is enabled.
|
||||
user: core
|
||||
<source>
|
||||
*: "Rewind on Pause"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Spol tilbage ved pause"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Spol tilbage ved pause"
|
||||
</voice>
|
||||
</phrase>
|
||||
|
|
|
|||
|
|
@ -1986,19 +1986,16 @@
|
|||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HEADPHONE_UNPLUG_RW
|
||||
desc: in pause_phones_menu.
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: none
|
||||
headphone_detection: "Duration to Rewind"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: none
|
||||
headphone_detection: "Rücklaufdauer"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: none
|
||||
headphone_detection: "Rücklaufdauer"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
|
|
@ -2239,6 +2236,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Building database... %d found (LEFT to return)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)"
|
||||
gogearsa9200: "Building database... %d found (REW to return)"
|
||||
archosplayer: "Building DB %d found"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Erstelle Datenbank... %d gefunden (OFF zum Abbrechen)"
|
||||
|
|
@ -2247,6 +2245,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Erstelle Datenbank... %d gefunden (LEFT zum Abbrechen)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Erstelle Datenbank... %d gefunden (PREV zum Abbrechen)"
|
||||
gogearsa9200: "Erstelle Datenbank... %d gefunden (REW zum Abbrechen)"
|
||||
archosplayer: "Erstelle DB %d gefu."
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Erstelle Datenbank"
|
||||
|
|
@ -12678,3 +12677,17 @@
|
|||
*: "Nur in bestimmten Verzeichnissen"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PAUSE_REWIND
|
||||
desc: Seconds to rewind when rewind on pause is enabled.
|
||||
user: core
|
||||
<source>
|
||||
*: "Rewind on Pause"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Zurückspulen bei Pause"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Zurückspulen bei Pause"
|
||||
</voice>
|
||||
</phrase>
|
||||
|
|
|
|||
12676
apps/lang/english-us.lang
Normal file
12676
apps/lang/english-us.lang
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -2319,6 +2319,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Building database... %d found (LEFT to return)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)"
|
||||
gogearsa9200: "Building database... %d found (REW to return)"
|
||||
archosplayer: "Building DB %d found"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Building database... %d found (OFF to return)"
|
||||
|
|
@ -2327,6 +2328,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Building database... %d found (LEFT to return)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)"
|
||||
gogearsa9200: "Building database... %d found (REW to return)"
|
||||
archosplayer: "Building DB %d found"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "entries found for database"
|
||||
|
|
|
|||
|
|
@ -2262,6 +2262,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Building database... %d found (LEFT to return)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)"
|
||||
gogearsa9200: "Building database... %d found (REW to return)"
|
||||
archosplayer: "Building DB %d found"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Création base de données... %d trouvés (OFF = retour)"
|
||||
|
|
@ -2270,6 +2271,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Création base de données... %d trouvés (LEFT = retour)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Création base de données... %d trouvés (PREV = retour)"
|
||||
gogearsa9200: "Création base de données... %d trouvés (REW = retour)"
|
||||
archosplayer: "Création BD %d trouvés"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "entrées trouvées pour base de données"
|
||||
|
|
|
|||
|
|
@ -9035,6 +9035,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Building database... %d found (LEFT to return)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)"
|
||||
gogearsa9200: "Building database... %d found (REW to return)"
|
||||
archosplayer: "Building DB %d found"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Aanmaken van database... %d gevonden (OFF = terug)"
|
||||
|
|
@ -9043,6 +9044,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Aanmaken van database... %d gevonden (LINKS = terug)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Aanmaken van database... %d gevonden (PREV = terug)"
|
||||
gogearsa9200: "Aanmaken van database... %d gevonden (REW = terug)"
|
||||
archosplayer: "Aanmaken DB %d gev."
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Aanmaken van database"
|
||||
|
|
@ -9824,19 +9826,16 @@
|
|||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HEADPHONE_UNPLUG_RW
|
||||
desc: in pause_phones_menu.
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: none
|
||||
headphone_detection: "Duration to Rewind"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: none
|
||||
headphone_detection: "Terug te springen tijd"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: none
|
||||
headphone_detection: "Terug te springen tijd"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
|
|
@ -12664,3 +12663,17 @@
|
|||
*: "Alleen in bepaalde mappen"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PAUSE_REWIND
|
||||
desc: Seconds to rewind when rewind on pause is enabled.
|
||||
user: core
|
||||
<source>
|
||||
*: "Rewind on Pause"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Terugspoelen bij pauzeren"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Terugspoelen bij pauzeren"
|
||||
</voice>
|
||||
</phrase>
|
||||
|
|
|
|||
|
|
@ -1992,19 +1992,16 @@
|
|||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HEADPHONE_UNPLUG_RW
|
||||
desc: in pause_phones_menu.
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: none
|
||||
headphone_detection: "Duration to Rewind"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: none
|
||||
headphone_detection: "Czas do cofnięcia"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: none
|
||||
headphone_detection: "Czas do cofnięcia"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
|
|
@ -2245,17 +2242,19 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Building database... %d found (LEFT to return)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)"
|
||||
gogearsa9200: "Building database... %d found (REW to return)"
|
||||
archosplayer: "Building DB %d found"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Budowanie biblioteki... %d znalezionych (OFF żeby wrócić)"
|
||||
iriverh100,iriverh120,iriverh300: "Budowanie biblioteki... %d znalezionych (STOP żeby wrócić)"
|
||||
ipod*: "Budowanie biblioteki... %d znalezionych (PREV żeby wrócić)"
|
||||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Budowanie biblioteki... %d znalezionych (LEFT żeby wrócić)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Budowanie biblioteki... %d znalezionych (PREV żeby wrócić)"
|
||||
gogearsa9200: "Budowanie biblioteki... %d znalezionych (REW żeby wrócić)"
|
||||
*: "Budowanie biblioteki... %d znalezionych (OFF by wrócić)"
|
||||
iriverh100,iriverh120,iriverh300: "Budowanie biblioteki... %d znalezionych (STOP by wrócić)"
|
||||
ipod*: "Budowanie biblioteki... %d znalezionych (PREV by wrócić)"
|
||||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Budowanie biblioteki... %d znalezionych (LEFT by wrócić)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Budowanie biblioteki... %d znalezionych (PREV by wrócić)"
|
||||
gogearsa9200: "Budowanie biblioteki... %d znalezionych (REW by wrócić)"
|
||||
archosplayer: "Budowanie biblioteki %d znalezionych"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Znaleziono wpisy do biblioteki"
|
||||
*: "znaleziono wpisy do biblioteki"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
|
|
@ -12668,3 +12667,17 @@
|
|||
*: "Tylko w wybranych katalogach"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PAUSE_REWIND
|
||||
desc: Seconds to rewind when rewind on pause is enabled.
|
||||
user: core
|
||||
<source>
|
||||
*: "Rewind on Pause"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Cofaj po Wstrzymaniu"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Cofaj po Wstrzymaniu"
|
||||
</voice>
|
||||
</phrase>
|
||||
|
|
|
|||
|
|
@ -2812,6 +2812,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Building database... %d found (LEFT to return)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)"
|
||||
gogearsa9200: "Building database... %d found (REW to return)"
|
||||
archosplayer: "Building DB %d found"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Creare bază de date... %d găsite (STINGERE pentru revenire)"
|
||||
|
|
@ -2820,6 +2821,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Creare bază de date... %d găsite (LEFT pentru revenire)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Creare bază de date... %d găsite (PREV pentru revenire)"
|
||||
gogearsa9200: "Creare bază de date... %d găsite (REW pentru revenire)"
|
||||
archosplayer: "Creare bază de date... %d găsite"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "intrări găsite pentru baza de date"
|
||||
|
|
@ -12721,25 +12723,6 @@
|
|||
*: "Pornire explorator fișiere aici"
|
||||
</voice>
|
||||
</phrase>
|
||||
|
||||
|
||||
<phrase>
|
||||
id: LANG_RECORDING_HISTOGRAM_INTERVAL
|
||||
desc: in record settings menu
|
||||
user: core
|
||||
<source>
|
||||
*: none
|
||||
recording_histogram: "Histogram interval"
|
||||
</source>
|
||||
<dest>
|
||||
*: none
|
||||
recording_histogram: "Intervalul histogramei"
|
||||
</dest>
|
||||
<voice>
|
||||
*: none
|
||||
recording_histogram: "Intervalul histogramei"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PAUSE_REWIND
|
||||
desc: Seconds to rewind when rewind on pause is enabled.
|
||||
|
|
@ -12754,3 +12737,20 @@
|
|||
*: "Rebobinare la pauză"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HISTOGRAM_INTERVAL
|
||||
desc: in record settings menu
|
||||
user: core
|
||||
<source>
|
||||
*: none
|
||||
histogram: "Histogram interval"
|
||||
</source>
|
||||
<dest>
|
||||
*: none
|
||||
histogram: "Histogram interval"
|
||||
</dest>
|
||||
<voice>
|
||||
*: none
|
||||
histogram: "Interval histogramă "
|
||||
</voice>
|
||||
</phrase>
|
||||
|
|
|
|||
|
|
@ -1967,19 +1967,16 @@
|
|||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_HEADPHONE_UNPLUG_RW
|
||||
desc: in pause_phones_menu.
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: none
|
||||
headphone_detection: "Duration to Rewind"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: none
|
||||
headphone_detection: "За колико да се врати"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: none
|
||||
headphone_detection: "За колико да се врати"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
|
|
@ -2220,6 +2217,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Building database... %d found (LEFT to return)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)"
|
||||
gogearsa9200: "Building database... %d found (REW to return)"
|
||||
archosplayer: "Building DB %d found"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Креирам базу података... %d пронађено (OFF за повратак)"
|
||||
|
|
@ -2228,6 +2226,7 @@
|
|||
iaudiox5,iaudiom5,gigabeat*,mrobe100: "Креирам базу података... %d пронађено (LEFT за повратак)"
|
||||
iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Креирам базу података... %d пронађено (PREV за повратак)"
|
||||
gogearsa9200: "Креирам базу података... %d пронађено (REW за повратак)"
|
||||
archosplayer: "Креирам БП %d пронађено"
|
||||
</dest>
|
||||
<voice>
|
||||
*: ""
|
||||
|
|
@ -12658,3 +12657,17 @@
|
|||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PAUSE_REWIND
|
||||
desc: Seconds to rewind when rewind on pause is enabled.
|
||||
user: core
|
||||
<source>
|
||||
*: "Rewind on Pause"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Премотај код паузирања"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Премотај код паузирања"
|
||||
</voice>
|
||||
</phrase>
|
||||
|
|
|
|||
|
|
@ -456,8 +456,9 @@ static int asf_parse_header(int fd, struct mp3entry* id3,
|
|||
lseek(fd, length, SEEK_CUR);
|
||||
}
|
||||
} else if (!strncmp("replaygain_", utf8buf, 11)) {
|
||||
char *value = id3buf;
|
||||
asf_utf16LEdecode(fd, length, &id3buf, &id3buf_remaining);
|
||||
parse_replaygain(utf8buf, id3buf, id3);
|
||||
parse_replaygain(utf8buf, value, id3);
|
||||
} else if (!strcmp("MusicBrainz/Track Id", utf8buf)) {
|
||||
id3->mb_track_id = id3buf;
|
||||
asf_utf16LEdecode(fd, length, &id3buf, &id3buf_remaining);
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ bool warn_on_pl_erase(void)
|
|||
|
||||
/* Performance optimized version of the read_line() (see below) function. */
|
||||
int fast_readline(int fd, char *buf, int buf_size, void *parameters,
|
||||
int (*callback)(int n, const char *buf, void *parameters))
|
||||
int (*callback)(int n, char *buf, void *parameters))
|
||||
{
|
||||
char *p, *next;
|
||||
int rc, pos = 0;
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ bool warn_on_pl_erase(void);
|
|||
*/
|
||||
int read_line(int fd, char* buffer, int buffer_size);
|
||||
int fast_readline(int fd, char *buf, int buf_size, void *parameters,
|
||||
int (*callback)(int n, const char *buf, void *parameters));
|
||||
int (*callback)(int n, char *buf, void *parameters));
|
||||
|
||||
bool settings_parseline(char* line, char** name, char** value);
|
||||
long default_event_handler_ex(long event, void (*callback)(void *), void *parameter);
|
||||
|
|
|
|||
|
|
@ -174,6 +174,12 @@ void radioart_init(bool entering_screen)
|
|||
radioart[i].name[0] = '\0';
|
||||
}
|
||||
add_event(PLAYBACK_EVENT_START_PLAYBACK, true, playback_restarting_handler);
|
||||
|
||||
/* grab control over buffering */
|
||||
char* buf;
|
||||
size_t bufsize;
|
||||
buf = audio_get_buffer(false, &bufsize);
|
||||
buffering_reset(buf, bufsize);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -390,7 +390,7 @@ static long find_entry_ram(const char *filename,
|
|||
int i;
|
||||
|
||||
/* Check if tagcache is loaded into ram. */
|
||||
if (!tc_stat.ramcache)
|
||||
if (!tc_stat.ramcache || !is_dircache_intact())
|
||||
return -1;
|
||||
|
||||
if (dc == NULL)
|
||||
|
|
@ -538,8 +538,7 @@ static int find_index(const char *filename)
|
|||
long idx_id = -1;
|
||||
|
||||
#if defined(HAVE_TC_RAMCACHE) && defined(HAVE_DIRCACHE)
|
||||
if (tc_stat.ramcache && is_dircache_intact())
|
||||
idx_id = find_entry_ram(filename, NULL);
|
||||
idx_id = find_entry_ram(filename, NULL);
|
||||
#endif
|
||||
|
||||
if (idx_id < 0)
|
||||
|
|
@ -720,12 +719,25 @@ static bool retrieve(struct tagcache_search *tcs, struct index_entry *idx,
|
|||
struct tagfile_entry *ep;
|
||||
|
||||
# ifdef HAVE_DIRCACHE
|
||||
if (tag == tag_filename && (idx->flag & FLAG_DIRCACHE)
|
||||
&& is_dircache_intact())
|
||||
if (tag == tag_filename && (idx->flag & FLAG_DIRCACHE))
|
||||
{
|
||||
dircache_copy_path((struct dircache_entry *)seek,
|
||||
buf, size);
|
||||
return true;
|
||||
/* for tag_filename, seek is a dircache index */
|
||||
if (is_dircache_intact())
|
||||
{
|
||||
dircache_copy_path((struct dircache_entry *)seek,
|
||||
buf, size);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The seek is useless now, there's nothing we can return. */
|
||||
logf("retrieve: dircache gone, cannot read file name");
|
||||
tagcache_unload_ramcache();
|
||||
// XXX do this when there's a way to not trigger an
|
||||
// update before reloading:
|
||||
// tagcache_start_scan();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
# endif
|
||||
|
|
@ -1478,16 +1490,29 @@ static bool get_next(struct tagcache_search *tcs)
|
|||
{
|
||||
|
||||
#if defined(HAVE_TC_RAMCACHE) && defined(HAVE_DIRCACHE)
|
||||
if (tcs->type == tag_filename && (flag & FLAG_DIRCACHE)
|
||||
&& is_dircache_intact())
|
||||
if (tcs->type == tag_filename && (flag & FLAG_DIRCACHE))
|
||||
{
|
||||
dircache_copy_path((struct dircache_entry *)tcs->position,
|
||||
buf, sizeof buf);
|
||||
tcs->result = buf;
|
||||
tcs->result_len = strlen(buf) + 1;
|
||||
tcs->ramresult = false;
|
||||
if (is_dircache_intact())
|
||||
{
|
||||
dircache_copy_path((struct dircache_entry *)tcs->position,
|
||||
buf, sizeof buf);
|
||||
tcs->result = buf;
|
||||
tcs->result_len = strlen(buf) + 1;
|
||||
tcs->ramresult = false;
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The seek is useless now, there's nothing we can return. */
|
||||
logf("get_next: dircache gone, cannot read file name");
|
||||
tagcache_unload_ramcache();
|
||||
// XXX do this when there's a way to not trigger an
|
||||
// update before reloading:
|
||||
// tagcache_start_scan();
|
||||
tcs->valid = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
|
|
@ -1804,10 +1829,7 @@ static void __attribute__ ((noinline)) add_tagcache(char *path,
|
|||
|
||||
/* Check if the file is already cached. */
|
||||
#if defined(HAVE_TC_RAMCACHE) && defined(HAVE_DIRCACHE)
|
||||
if (tc_stat.ramcache && is_dircache_intact())
|
||||
{
|
||||
idx_id = find_entry_ram(path, dc);
|
||||
}
|
||||
idx_id = find_entry_ram(path, dc);
|
||||
#endif
|
||||
|
||||
/* Be sure the entry doesn't exist. */
|
||||
|
|
@ -3373,7 +3395,7 @@ static bool read_tag(char *dest, long size,
|
|||
return false;
|
||||
}
|
||||
|
||||
static int parse_changelog_line(int line_n, const char *buf, void *parameters)
|
||||
static int parse_changelog_line(int line_n, char *buf, void *parameters)
|
||||
{
|
||||
struct index_entry idx;
|
||||
char tag_data[TAG_MAXLEN+32];
|
||||
|
|
@ -3909,7 +3931,7 @@ static bool load_tagcache(void)
|
|||
{
|
||||
struct tagcache_header *tch;
|
||||
struct master_header tcmh;
|
||||
long bytesleft = tc_stat.ramcache_allocated;
|
||||
long bytesleft = tc_stat.ramcache_allocated - sizeof(struct ramcache_header);
|
||||
struct index_entry *idx;
|
||||
int rc, fd;
|
||||
char *p;
|
||||
|
|
@ -3947,6 +3969,14 @@ static bool load_tagcache(void)
|
|||
/* Load the master index table. */
|
||||
for (i = 0; i < tcmh.tch.entry_count; i++)
|
||||
{
|
||||
bytesleft -= sizeof(struct index_entry);
|
||||
if (bytesleft < 0)
|
||||
{
|
||||
logf("too big tagcache.");
|
||||
close(fd);
|
||||
return false;
|
||||
}
|
||||
|
||||
rc = ecread_index_entry(fd, idx);
|
||||
if (rc != sizeof(struct index_entry))
|
||||
{
|
||||
|
|
@ -3954,14 +3984,6 @@ static bool load_tagcache(void)
|
|||
close(fd);
|
||||
return false;
|
||||
}
|
||||
|
||||
bytesleft -= sizeof(struct index_entry);
|
||||
if (bytesleft < 0 || ((long)idx - (long)hdr->indices) >= tc_stat.ramcache_allocated)
|
||||
{
|
||||
logf("too big tagcache.");
|
||||
close(fd);
|
||||
return false;
|
||||
}
|
||||
|
||||
idx++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -836,15 +836,21 @@ bool tagtree_import(void)
|
|||
|
||||
static bool parse_menu(const char *filename);
|
||||
|
||||
static int parse_line(int n, const char *buf, void *parameters)
|
||||
static int parse_line(int n, char *buf, void *parameters)
|
||||
{
|
||||
char data[256];
|
||||
int variable;
|
||||
static bool read_menu;
|
||||
int i;
|
||||
char *p;
|
||||
|
||||
(void)parameters;
|
||||
|
||||
/* Strip possible <CR> at end of line. */
|
||||
p = strchr(buf, '\r');
|
||||
if (p != NULL)
|
||||
*p = '\0';
|
||||
|
||||
logf("parse:%d/%s", n, buf);
|
||||
|
||||
/* First line, do initialisation. */
|
||||
|
|
@ -1123,7 +1129,7 @@ static int format_str(struct tagcache_search *tcs, struct display_format *fmt,
|
|||
|
||||
buf[buf_pos++] = fmt->formatstr[i];
|
||||
|
||||
if (buf_pos - 1 >= buf_size)
|
||||
if (buf_pos >= buf_size - 1) /* need at least one more byte for \0 */
|
||||
{
|
||||
logf("buffer overflow");
|
||||
return -4;
|
||||
|
|
@ -1238,6 +1244,7 @@ static int retrieve_entries(struct tree_context *c, int offset, bool init)
|
|||
dptr->name = str(LANG_TAGNAVI_ALL_TRACKS);
|
||||
dptr++;
|
||||
current_entry_count++;
|
||||
special_entry_count++;
|
||||
}
|
||||
if (offset <= 1)
|
||||
{
|
||||
|
|
@ -1246,12 +1253,12 @@ static int retrieve_entries(struct tree_context *c, int offset, bool init)
|
|||
dptr->extraseek = -1;
|
||||
dptr++;
|
||||
current_entry_count++;
|
||||
special_entry_count++;
|
||||
}
|
||||
special_entry_count+=2;
|
||||
|
||||
total_count += 2;
|
||||
}
|
||||
|
||||
total_count += special_entry_count;
|
||||
|
||||
while (tagcache_get_next(&tcs))
|
||||
{
|
||||
if (total_count++ < offset)
|
||||
|
|
@ -1380,7 +1387,7 @@ static int retrieve_entries(struct tree_context *c, int offset, bool init)
|
|||
if (strip)
|
||||
{
|
||||
dptr = c->dircache;
|
||||
for (i = 0; i < total_count; i++, dptr++)
|
||||
for (i = special_entry_count; i < current_entry_count; i++, dptr++)
|
||||
{
|
||||
int len = strlen(dptr->name);
|
||||
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@
|
|||
|
||||
/* Main LCD backlight brightness range and defaults */
|
||||
#define MIN_BRIGHTNESS_SETTING 1
|
||||
#define MAX_BRIGHTNESS_SETTING 20
|
||||
#define MAX_BRIGHTNESS_SETTING 12
|
||||
#define DEFAULT_BRIGHTNESS_SETTING 6
|
||||
|
||||
/* define this if you have a light associated with the buttons */
|
||||
|
|
|
|||
|
|
@ -331,6 +331,7 @@ static inline void usb_slave_mode(bool on)
|
|||
if(rc)
|
||||
panicf("storage: %d",rc);
|
||||
|
||||
sleep(HZ/10);
|
||||
rc = disk_mount_all();
|
||||
if(rc <= 0) /* no partition */
|
||||
panicf("mount: %d",rc);
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
$publicrelease="3.8.1";
|
||||
$manualrelease="3.8.1";
|
||||
$voicerelease="3.8.1";
|
||||
$releasedate="April 06, 2011";
|
||||
$releasenotes="/wiki/ReleaseNotes381";
|
||||
$publicrelease="3.9.1";
|
||||
$manualrelease="3.9.1";
|
||||
$voicerelease="3.9.1";
|
||||
$releasedate="01 September 2011";
|
||||
$releasenotes="/wiki/ReleaseNotes391";
|
||||
|
||||
%builds = (
|
||||
'archosav300' => {
|
||||
|
|
|
|||
2
tools/configure
vendored
2
tools/configure
vendored
|
|
@ -232,6 +232,7 @@ simcc () {
|
|||
LDOPTS="$LDOPTS -mconsole"
|
||||
output="$output.exe"
|
||||
winbuild="yes"
|
||||
SHARED_CFLAGS=''
|
||||
else
|
||||
case $uname in
|
||||
CYGWIN*)
|
||||
|
|
@ -241,6 +242,7 @@ simcc () {
|
|||
LDOPTS="$LDOPTS -mconsole"
|
||||
output="$output.exe"
|
||||
winbuild="yes"
|
||||
SHARED_CFLAGS=''
|
||||
;;
|
||||
|
||||
MINGW*)
|
||||
|
|
|
|||
30
tools/multigcc.pl
Executable file → Normal file
30
tools/multigcc.pl
Executable file → Normal file
|
|
@ -1,5 +1,4 @@
|
|||
#!/usr/bin/perl
|
||||
use Switch;
|
||||
use List::Util 'shuffle'; # standard from Perl 5.8 and later
|
||||
|
||||
my $tempfile = "multigcc.out";
|
||||
|
|
@ -26,23 +25,22 @@ my $command = join " ", @params;
|
|||
|
||||
# count number of cores
|
||||
my $cores;
|
||||
switch($^O) {
|
||||
case "darwin" {
|
||||
chomp($cores = `sysctl -n hw.ncpu`);
|
||||
$cores = 1 if ($?);
|
||||
}
|
||||
case "solaris" {
|
||||
$cores = scalar grep /on-line/i, `psrinfo`;
|
||||
$cores = 1 if ($?);
|
||||
# Don't use given/when here - it's not compatible with old perl versions
|
||||
if ($^O eq 'darwin') {
|
||||
chomp($cores = `sysctl -n hw.ncpu`);
|
||||
$cores = 1 if ($?);
|
||||
}
|
||||
elsif ($^O eq 'solaris') {
|
||||
$cores = scalar grep /on-line/i, `psrinfo`;
|
||||
$cores = 1 if ($?);
|
||||
}
|
||||
else {
|
||||
if (open CPUINFO, "</proc/cpuinfo") {
|
||||
$cores = scalar grep /^processor/i, <CPUINFO>;
|
||||
close CPUINFO;
|
||||
}
|
||||
else {
|
||||
if (open CPUINFO, "</proc/cpuinfo") {
|
||||
$cores = scalar grep /^processor/i, <CPUINFO>;
|
||||
close CPUINFO;
|
||||
}
|
||||
else {
|
||||
$cores = 1;
|
||||
}
|
||||
$cores = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#!/usr/bin/perl
|
||||
$version="3.5RC";
|
||||
$version="3.9.1";
|
||||
|
||||
require "tools/builds.pm";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
$version="3.0";
|
||||
$version="3.9.1";
|
||||
|
||||
require "tools/builds.pm";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
version="3.0"
|
||||
version="3.9.1"
|
||||
|
||||
srcdir=.
|
||||
tempdir=rockbox-temp
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
$version="3.0";
|
||||
$version="3.9.1";
|
||||
|
||||
require "tools/builds.pm";
|
||||
|
||||
|
|
|
|||
155
tools/voice.pl
Executable file → Normal file
155
tools/voice.pl
Executable file → Normal file
|
|
@ -19,7 +19,6 @@ use strict;
|
|||
use warnings;
|
||||
use File::Basename;
|
||||
use File::Copy;
|
||||
use Switch;
|
||||
use vars qw($V $C $t $l $e $E $s $S $i $v);
|
||||
use IPC::Open2;
|
||||
use IPC::Open3;
|
||||
|
|
@ -74,36 +73,35 @@ sub init_tts {
|
|||
our $verbose;
|
||||
my ($tts_engine, $tts_engine_opts, $language) = @_;
|
||||
my %ret = ("name" => $tts_engine);
|
||||
switch($tts_engine) {
|
||||
case "festival" {
|
||||
print("> festival $tts_engine_opts --server\n") if $verbose;
|
||||
my $pid = open(FESTIVAL_SERVER, "| festival $tts_engine_opts --server > /dev/null 2>&1");
|
||||
my $dummy = *FESTIVAL_SERVER; #suppress warning
|
||||
$SIG{INT} = sub { kill TERM => $pid; print("foo"); panic_cleanup(); };
|
||||
$SIG{KILL} = sub { kill TERM => $pid; print("boo"); panic_cleanup(); };
|
||||
$ret{"pid"} = $pid;
|
||||
}
|
||||
case "sapi" {
|
||||
my $toolsdir = dirname($0);
|
||||
my $path = `cygpath $toolsdir -a -w`;
|
||||
chomp($path);
|
||||
$path = $path . '\\';
|
||||
my $cmd = $path . "sapi_voice.vbs /language:$language $tts_engine_opts";
|
||||
$cmd =~ s/\\/\\\\/g;
|
||||
print("> cscript //nologo $cmd\n") if $verbose;
|
||||
my $pid = open2(*CMD_OUT, *CMD_IN, "cscript //nologo $cmd");
|
||||
binmode(*CMD_IN, ':encoding(utf16le)');
|
||||
binmode(*CMD_OUT, ':encoding(utf16le)');
|
||||
$SIG{INT} = sub { print(CMD_IN "QUIT\r\n"); panic_cleanup(); };
|
||||
$SIG{KILL} = sub { print(CMD_IN "QUIT\r\n"); panic_cleanup(); };
|
||||
print(CMD_IN "QUERY\tVENDOR\r\n");
|
||||
my $vendor = readline(*CMD_OUT);
|
||||
$vendor =~ s/\r\n//;
|
||||
%ret = (%ret,
|
||||
"stdin" => *CMD_IN,
|
||||
"stdout" => *CMD_OUT,
|
||||
"vendor" => $vendor);
|
||||
}
|
||||
# Don't use given/when here - it's not compatible with old perl versions
|
||||
if ($tts_engine eq 'festival') {
|
||||
print("> festival $tts_engine_opts --server\n") if $verbose;
|
||||
my $pid = open(FESTIVAL_SERVER, "| festival $tts_engine_opts --server > /dev/null 2>&1");
|
||||
my $dummy = *FESTIVAL_SERVER; #suppress warning
|
||||
$SIG{INT} = sub { kill TERM => $pid; print("foo"); panic_cleanup(); };
|
||||
$SIG{KILL} = sub { kill TERM => $pid; print("boo"); panic_cleanup(); };
|
||||
$ret{"pid"} = $pid;
|
||||
}
|
||||
elsif ($tts_engine eq 'sapi') {
|
||||
my $toolsdir = dirname($0);
|
||||
my $path = `cygpath $toolsdir -a -w`;
|
||||
chomp($path);
|
||||
$path = $path . '\\';
|
||||
my $cmd = $path . "sapi_voice.vbs /language:$language $tts_engine_opts";
|
||||
$cmd =~ s/\\/\\\\/g;
|
||||
print("> cscript //nologo $cmd\n") if $verbose;
|
||||
my $pid = open2(*CMD_OUT, *CMD_IN, "cscript //nologo $cmd");
|
||||
binmode(*CMD_IN, ':encoding(utf16le)');
|
||||
binmode(*CMD_OUT, ':encoding(utf16le)');
|
||||
$SIG{INT} = sub { print(CMD_IN "QUIT\r\n"); panic_cleanup(); };
|
||||
$SIG{KILL} = sub { print(CMD_IN "QUIT\r\n"); panic_cleanup(); };
|
||||
print(CMD_IN "QUERY\tVENDOR\r\n");
|
||||
my $vendor = readline(*CMD_OUT);
|
||||
$vendor =~ s/\r\n//;
|
||||
%ret = (%ret,
|
||||
"stdin" => *CMD_IN,
|
||||
"stdout" => *CMD_OUT,
|
||||
"vendor" => $vendor);
|
||||
}
|
||||
return \%ret;
|
||||
}
|
||||
|
|
@ -111,15 +109,13 @@ sub init_tts {
|
|||
# Shutdown TTS engine if necessary.
|
||||
sub shutdown_tts {
|
||||
my ($tts_object) = @_;
|
||||
switch($$tts_object{"name"}) {
|
||||
case "festival" {
|
||||
# Send SIGTERM to festival server
|
||||
kill TERM => $$tts_object{"pid"};
|
||||
}
|
||||
case "sapi" {
|
||||
print({$$tts_object{"stdin"}} "QUIT\r\n");
|
||||
close($$tts_object{"stdin"});
|
||||
}
|
||||
if ($$tts_object{'name'} eq 'festival') {
|
||||
# Send SIGTERM to festival server
|
||||
kill TERM => $$tts_object{"pid"};
|
||||
}
|
||||
elsif ($$tts_object{'name'} eq 'sapi') {
|
||||
print({$$tts_object{"stdin"}} "QUIT\r\n");
|
||||
close($$tts_object{"stdin"});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -146,48 +142,47 @@ sub voicestring {
|
|||
our $verbose;
|
||||
my ($string, $output, $tts_engine_opts, $tts_object) = @_;
|
||||
my $cmd;
|
||||
printf("Generate \"%s\" with %s in file %s\n", $string, $$tts_object{"name"}, $output) if $verbose;
|
||||
switch($$tts_object{"name"}) {
|
||||
case "festival" {
|
||||
# festival_client lies to us, so we have to do awful soul-eating
|
||||
# work with IPC::open3()
|
||||
$cmd = "festival_client --server localhost --otype riff --ttw --output \"$output\"";
|
||||
# Use festival-prolog.scm if it's there (created by user of tools/configure)
|
||||
if (-f "festival-prolog.scm") {
|
||||
$cmd .= " --prolog festival-prolog.scm";
|
||||
}
|
||||
print("> $cmd\n") if $verbose;
|
||||
# Open command, and filehandles for STDIN, STDOUT, STDERR
|
||||
my $pid = open3(*CMD_IN, *CMD_OUT, *CMD_ERR, $cmd);
|
||||
# Put the string to speak into STDIN and close it
|
||||
print(CMD_IN $string);
|
||||
close(CMD_IN);
|
||||
# Read all output from festival_client (because it LIES TO US)
|
||||
while (<CMD_ERR>) {
|
||||
}
|
||||
close(CMD_OUT);
|
||||
close(CMD_ERR);
|
||||
my $name = $$tts_object{'name'};
|
||||
printf("Generate \"%s\" with %s in file %s\n", $string, $name, $output) if $verbose;
|
||||
if ($name eq 'festival') {
|
||||
# festival_client lies to us, so we have to do awful soul-eating
|
||||
# work with IPC::open3()
|
||||
$cmd = "festival_client --server localhost --otype riff --ttw --output \"$output\"";
|
||||
# Use festival-prolog.scm if it's there (created by user of tools/configure)
|
||||
if (-f "festival-prolog.scm") {
|
||||
$cmd .= " --prolog festival-prolog.scm";
|
||||
}
|
||||
case "flite" {
|
||||
$cmd = "flite $tts_engine_opts -t \"$string\" \"$output\"";
|
||||
print("> $cmd\n") if $verbose;
|
||||
`$cmd`;
|
||||
}
|
||||
case "espeak" {
|
||||
$cmd = "espeak $tts_engine_opts -w \"$output\"";
|
||||
print("> $cmd\n") if $verbose;
|
||||
open(ESPEAK, "| $cmd");
|
||||
print ESPEAK $string . "\n";
|
||||
close(ESPEAK);
|
||||
}
|
||||
case "sapi" {
|
||||
print({$$tts_object{"stdin"}} "SPEAK\t$output\t$string\r\n");
|
||||
}
|
||||
case "swift" {
|
||||
$cmd = "swift $tts_engine_opts -o \"$output\" \"$string\"";
|
||||
print("> $cmd\n") if $verbose;
|
||||
system($cmd);
|
||||
print("> $cmd\n") if $verbose;
|
||||
# Open command, and filehandles for STDIN, STDOUT, STDERR
|
||||
my $pid = open3(*CMD_IN, *CMD_OUT, *CMD_ERR, $cmd);
|
||||
# Put the string to speak into STDIN and close it
|
||||
print(CMD_IN $string);
|
||||
close(CMD_IN);
|
||||
# Read all output from festival_client (because it LIES TO US)
|
||||
while (<CMD_ERR>) {
|
||||
}
|
||||
close(CMD_OUT);
|
||||
close(CMD_ERR);
|
||||
}
|
||||
elsif ($name eq 'flite') {
|
||||
$cmd = "flite $tts_engine_opts -t \"$string\" \"$output\"";
|
||||
print("> $cmd\n") if $verbose;
|
||||
`$cmd`;
|
||||
}
|
||||
elsif ($name eq 'espeak') {
|
||||
$cmd = "espeak $tts_engine_opts -w \"$output\"";
|
||||
print("> $cmd\n") if $verbose;
|
||||
open(ESPEAK, "| $cmd");
|
||||
print ESPEAK $string . "\n";
|
||||
close(ESPEAK);
|
||||
}
|
||||
elsif ($name eq 'sapi') {
|
||||
print({$$tts_object{"stdin"}} "SPEAK\t$output\t$string\r\n");
|
||||
}
|
||||
elsif ($name eq 'swift') {
|
||||
$cmd = "swift $tts_engine_opts -o \"$output\" \"$string\"";
|
||||
print("> $cmd\n") if $verbose;
|
||||
system($cmd);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue