公司网突然断了。没有音乐听了。就整了个这个。。。
[Golang] 纯文本查看 复制代码 package main
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"log"
"os"
"strings"
"time"
)
// 转换网易云 缓存到mp3
func main() {
cachePath := "C:\\\\Users\\Administrator\\AppData\\Local\\Netease\\CloudMusic\\Cache\\Cache"
args := os.Args[1:]
if len(args) != 2 {
log.Fatal("没有传目录参数 \n第一个参数为网易云音乐缓存文件夹 例如:" + cachePath + "\n第二个参数为保存转换过的mp3文件的文件夹")
}
cachePath = args[0]
targetPath := args[1] //"F:\\\\CloudMusic"
fmt.Printf("cachepath:%s targetPath:%s\n", cachePath, targetPath)
if err := os.MkdirAll(targetPath, 0777); err != nil {
log.Fatal(err)
}
files, _ := ioutil.ReadDir(cachePath)
// 启动多少个 goroutine
ch := make(chan string, 20)
startTime := time.Now()
count := 0
for _, file := range files {
if !file.IsDir() && strings.HasSuffix(file.Name(), ".uc") {
ch <- file.Name()
go func(fileName string) {
fmt.Println("parse :", fileName)
err := decodeFile(cachePath, fileName, targetPath, fileName+".mp3")
//err := decodeFileStream(cachePath, fileName, targetPath, fileName+".mp3")
count++
defer func() {
fmt.Println("parse end:", <-ch, " err:", err)
}()
}(file.Name())
}
}
fmt.Println("all end", time.Since(startTime), "count:", count)
}
func decodeFile(dirName, fileName, newDirName, newName string) error {
bytes, err := ioutil.ReadFile(dirName + "\\" + fileName)
if err != nil {
return err
}
for i := 0; i < len(bytes); i++ {
bytes[i] ^= 0xa3
}
return ioutil.WriteFile(newDirName+"\\"+newName, bytes, 0777)
}
编译好的小程序。
链接:https://share.weiyun.com/5fRjDJt 密码:j6xd6x
使用方法
main.exe 网易云缓存目录 要保存到的目录
缓存目录一般是 C:\\Users\Administrator\AppData\Local\Netease\CloudMusic\Cache\Cache
|