Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
tts-client
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
周亚武
tts-client
Commits
6b2f2ce9
Commit
6b2f2ce9
authored
Aug 23, 2024
by
周亚武
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改合并mp3文件规则
parent
b2c7abe9
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
39 additions
and
110 deletions
+39
-110
src/main/java/com/mortals/xhx/tts/UI/MainWindow.java
src/main/java/com/mortals/xhx/tts/UI/MainWindow.java
+4
-2
src/main/java/com/mortals/xhx/tts/utils/AddMp3Util.java
src/main/java/com/mortals/xhx/tts/utils/AddMp3Util.java
+35
-0
src/main/java/com/mortals/xhx/tts/utils/SpliceMp3Util.java
src/main/java/com/mortals/xhx/tts/utils/SpliceMp3Util.java
+0
-108
No files found.
src/main/java/com/mortals/xhx/tts/UI/MainWindow.java
View file @
6b2f2ce9
...
@@ -698,7 +698,8 @@ public class MainWindow {
...
@@ -698,7 +698,8 @@ public class MainWindow {
}
}
audioList
.
add
(
people
+
"kk.mp3"
);
audioList
.
add
(
people
+
"kk.mp3"
);
String
url
=
SpliceMp3Util
.
heBingMp3
(
audioList
);
// String url = SpliceMp3Util.heBingMp3(audioList);
String
url
=
AddMp3Util
.
mergeMp3s
(
audioList
);
if
(
url
!=
null
){
if
(
url
!=
null
){
if
(
speaker
.
equals
(
"en"
)){
if
(
speaker
.
equals
(
"en"
)){
...
@@ -848,7 +849,8 @@ public class MainWindow {
...
@@ -848,7 +849,8 @@ public class MainWindow {
}
}
audioList
.
add
(
people
+
"kk.mp3"
);
audioList
.
add
(
people
+
"kk.mp3"
);
String
url
=
SpliceMp3Util
.
heBingMp3
(
audioList
);
// String url = SpliceMp3Util.heBingMp3(audioList);
String
url
=
AddMp3Util
.
mergeMp3s
(
audioList
);
if
(
url
!=
null
){
if
(
url
!=
null
){
if
(
english
){
if
(
english
){
...
...
src/main/java/com/mortals/xhx/tts/utils/AddMp3Util.java
0 → 100644
View file @
6b2f2ce9
package
com.mortals.xhx.tts.utils
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.List
;
/**
* @author ZYW
* @date 2024-08-23 9:19
*/
public
class
AddMp3Util
{
public
static
String
mergeMp3s
(
List
<
String
>
inputFiles
)
{
String
luJing
=
"/tmp/"
;
if
(
System
.
getProperty
(
"os.name"
).
startsWith
(
"Windows"
)){
//windows电脑测试路径
luJing
=
"F:\\\\"
;
}
File
f
=
new
File
(
luJing
);
f
.
mkdirs
();
//生成处理后的文件
String
outputFile
=
luJing
+
"new.mp3"
;
ProcessBuilder
pb
=
new
ProcessBuilder
(
"sox"
);
pb
.
command
().
addAll
(
inputFiles
);
pb
.
command
().
add
(
outputFile
);
try
{
Process
process
=
pb
.
start
();
process
.
waitFor
();
}
catch
(
IOException
|
InterruptedException
e
)
{
e
.
printStackTrace
();
}
return
outputFile
;
}
}
src/main/java/com/mortals/xhx/tts/utils/SpliceMp3Util.java
View file @
6b2f2ce9
...
@@ -99,115 +99,7 @@ public class SpliceMp3Util {
...
@@ -99,115 +99,7 @@ public class SpliceMp3Util {
return
file2
.
getAbsolutePath
();
return
file2
.
getAbsolutePath
();
}
}
/**
* 分离出数据帧每一帧的大小并存在list数组里面
*失败则返回空
* @param path
* @return
* @throws IOException
*/
public
static
List
<
Integer
>
initMP3Frame
(
String
path
)
{
File
file
=
new
File
(
path
);
List
<
Integer
>
list
=
new
ArrayList
<>();
/* int framSize=0;
RandomAccessFile rad = new RandomAccessFile(file, "rw");
byte[] head = new byte[4];
rad.seek(framSize);
rad.read(head);
int bitRate = getBitRate((head[2] >> 4) & 0x0f) * 1000;
int sampleRate = getsampleRate((head[2] >> 2) & 0x03);
int paing = (head[2] >> 1) & 0x01;
int len = 144 * bitRate / sampleRate + paing;
for(int i=0,lens=(int)(file.length())/len;i<lens;i++){
list.add(len);// 将数据帧的长度添加进来
}*/
int
framSize
=
0
;
RandomAccessFile
rad
=
null
;
try
{
rad
=
new
RandomAccessFile
(
file
,
"rw"
);
}
catch
(
FileNotFoundException
e
)
{
e
.
printStackTrace
();
}
while
(
framSize
<
file
.
length
())
{
byte
[]
head
=
new
byte
[
4
];
try
{
rad
.
seek
(
framSize
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
try
{
rad
.
read
(
head
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
int
bitRate
=
getBitRate
((
head
[
2
]
>>
4
)
&
0x0f
)
*
1000
;
int
sampleRate
=
getsampleRate
((
head
[
2
]
>>
2
)
&
0x03
);
int
paing
=
(
head
[
2
]
>>
1
)
&
0x01
;
if
(
bitRate
==
0
||
sampleRate
==
0
)
return
null
;
int
len
=
144
*
bitRate
/
sampleRate
+
paing
;
list
.
add
(
len
);
// 将数据帧的长度添加进来
framSize
+=
len
;
}
return
list
;
}
/**
* 返回切割后的MP3文件的路径 返回null则切割失败 开始时间和结束时间的整数部分都是秒,以秒为单位
*
*
* @param list
* @param startTime
* @param stopTime
* @return
* @throws IOException
*/
public
static
String
CutingMp3
(
String
path
,
String
name
,
List
<
Integer
>
list
,
double
startTime
,
double
stopTime
)
throws
IOException
{
File
file
=
new
File
(
path
);
String
luJing
=
"/storage/emulated/0/"
+
"HH音乐播放器/切割/"
;
File
f
=
new
File
(
luJing
);
f
.
mkdirs
();
int
start
=
(
int
)
(
startTime
/
0.026
);
int
stop
=
(
int
)
(
stopTime
/
0.026
);
if
((
start
>
stop
)
||
(
start
<
0
)
||
(
stop
<
0
)
||
(
stop
>
list
.
size
()))
{
return
null
;
}
else
{
long
seekStart
=
0
;
// 开始剪切的字节的位置
for
(
int
i
=
0
;
i
<
start
;
i
++)
{
seekStart
+=
list
.
get
(
i
);
}
long
seekStop
=
0
;
// 结束剪切的的字节的位置
for
(
int
i
=
0
;
i
<
stop
;
i
++)
{
seekStop
+=
list
.
get
(
i
);
}
RandomAccessFile
raf
=
new
RandomAccessFile
(
file
,
"rw"
);
raf
.
seek
(
seekStart
);
File
file1
=
new
File
(
luJing
+
name
+
"(HH切割).mp3"
);
FileOutputStream
out
=
new
FileOutputStream
(
file1
);
byte
[]
bs
=
new
byte
[(
int
)(
seekStop
-
seekStart
)];
raf
.
read
(
bs
);
out
.
write
(
bs
);
raf
.
close
();
out
.
close
();
File
filed
=
new
File
(
path
);
if
(
filed
.
exists
())
filed
.
delete
();
return
file1
.
getAbsolutePath
();
}
}
private
static
int
getBitRate
(
int
i
)
{
int
a
[]
=
{
0
,
32
,
40
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
160
,
192
,
224
,
256
,
320
,
0
};
return
a
[
i
];
}
private
static
int
getsampleRate
(
int
i
)
{
int
a
[]
=
{
44100
,
48000
,
32000
,
0
};
return
a
[
i
];
}
/**
/**
* 返回合并后的文件的路径名,默认放在第一个文件的目录下
* 返回合并后的文件的路径名,默认放在第一个文件的目录下
* @return
* @return
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment