utau_synth.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. /*
  2. This file is part of QTau
  3. Copyright (C) 2013-2018 Tobias "Tomoko" Platen <tplaten@posteo.de>
  4. Copyright (C) 2013 digited <https://github.com/digited>
  5. Copyright (C) 2010-2013 HAL@ShurabaP <https://github.com/haruneko>
  6. QTau is free software: you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation, either version 3 of the License, or
  9. (at your option) any later version.
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. GNU General Public License for more details.
  14. You should have received a copy of the GNU General Public License
  15. along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. SPDX-License-Identifier: GPL-3.0+
  17. */
  18. #include "utau_synth.h"
  19. #include "utaudb.h"
  20. #include "sekai/midi.h"
  21. #include "sekai/SekaiContext.h"
  22. #include "sekai/vvd.h"
  23. #include "sekai/mfcc.h"
  24. #include "world/constantnumbers.h"
  25. #include <QFileInfo>
  26. #include <unistd.h>
  27. #include <assert.h>
  28. #include <sndfile.h>
  29. #include <samplerate.h>
  30. #include <math.h>
  31. #include <stdlib.h>
  32. #include <QDebug>
  33. #include <stdio.h>
  34. #include <assert.h>
  35. #include <vector>
  36. #include <iostream>
  37. #include <../editor/ustjkeys.h>
  38. #include <QStringList>
  39. #include <QJsonDocument>
  40. #define __devloglevel__ 5
  41. #include <QDir>
  42. #include <QFile>
  43. #include <QTextStream>
  44. #include <QDebug>
  45. #include <QDirIterator>
  46. #include <sekai/common.h>
  47. #include <sekai/WorldSynth2.h>
  48. #include "otoini.h"
  49. #include <QtConcurrent/QtConcurrent>
  50. bool fileExists(QString path) {
  51. QFileInfo check_file(path);
  52. // check if file exists and if yes: Is it really a file and no directory?
  53. return check_file.exists() && check_file.isFile();
  54. }
  55. QString UTAUSynth::name() { return "UTAUSynth"; }
  56. QString UTAUSynth::description() { return "a Japanese singing synthesizer"; }
  57. QString UTAUSynth::version() { return "18.04"; }
  58. bool UTAUSynth::synthIsRealtime() { return false; }
  59. void UTAUSynth::setup(IController* ctrl) {
  60. this->_ctrl = ctrl;
  61. this->_jack_samplerate = ctrl->sampleRate();
  62. _kana2romaji["あ"]="a";_romaji2kana["a"]="あ";
  63. _kana2romaji["い"]="i";_romaji2kana["i"]="い";
  64. _kana2romaji["う"]="u";_romaji2kana["u"]="う";
  65. _kana2romaji["え"]="e";_romaji2kana["e"]="え";
  66. _kana2romaji["お"]="o";_romaji2kana["o"]="お";
  67. _kana2romaji["か"]="ka";_romaji2kana["ka"]="か";
  68. _kana2romaji["き"]="ki";_romaji2kana["ki"]="き";
  69. _kana2romaji["く"]="ku";_romaji2kana["ku"]="く";
  70. _kana2romaji["け"]="ke";_romaji2kana["ke"]="け";
  71. _kana2romaji["こ"]="ko";_romaji2kana["ko"]="こ";
  72. _kana2romaji["きゃ"]="kya";_romaji2kana["kya"]="きゃ";
  73. _kana2romaji["きゅ"]="kyu";_romaji2kana["kyu"]="きゅ";
  74. _kana2romaji["きょ"]="kyo";_romaji2kana["kyo"]="きょ";
  75. _kana2romaji["さ"]="sa";_romaji2kana["sa"]="さ";
  76. _kana2romaji["し"]="shi";_romaji2kana["shi"]="し";
  77. _kana2romaji["す"]="su";_romaji2kana["su"]="す";
  78. _kana2romaji["せ"]="se";_romaji2kana["se"]="せ";
  79. _kana2romaji["そ"]="so";_romaji2kana["so"]="そ";
  80. _kana2romaji["しゃ"]="sha";_romaji2kana["sha"]="しゃ";
  81. _kana2romaji["しゅ"]="shu";_romaji2kana["shu"]="しゅ";
  82. _kana2romaji["しょ"]="sho";_romaji2kana["sho"]="しょ";
  83. _kana2romaji["た"]="ta";_romaji2kana["ta"]="た";
  84. _kana2romaji["ち"]="chi";_romaji2kana["chi"]="ち";
  85. _kana2romaji["つ"]="tsu";_romaji2kana["tsu"]="つ";
  86. _kana2romaji["て"]="te";_romaji2kana["te"]="て";
  87. _kana2romaji["と"]="to";_romaji2kana["to"]="と";
  88. _kana2romaji["ちゃ"]="cha";_romaji2kana["cha"]="ちゃ";
  89. _kana2romaji["ちゅ"]="chu";_romaji2kana["chu"]="ちゅ";
  90. _kana2romaji["ちょ"]="cho";_romaji2kana["cho"]="ちょ";
  91. _kana2romaji["な"]="na";_romaji2kana["na"]="な";
  92. _kana2romaji["に"]="ni";_romaji2kana["ni"]="に";
  93. _kana2romaji["ぬ"]="nu";_romaji2kana["nu"]="ぬ";
  94. _kana2romaji["ね"]="ne";_romaji2kana["ne"]="ね";
  95. _kana2romaji["の"]="no";_romaji2kana["no"]="の";
  96. _kana2romaji["にゃ"]="nya";_romaji2kana["nya"]="にゃ";
  97. _kana2romaji["にゅ"]="nyu";_romaji2kana["nyu"]="にゅ";
  98. _kana2romaji["にょ"]="nyo";_romaji2kana["nyo"]="にょ";
  99. _kana2romaji["は"]="ha";_romaji2kana["ha"]="は";
  100. _kana2romaji["ひ"]="hi";_romaji2kana["hi"]="ひ";
  101. _kana2romaji["ふ"]="fu";_romaji2kana["fu"]="ふ";
  102. _kana2romaji["へ"]="he";_romaji2kana["he"]="へ";
  103. _kana2romaji["ほ"]="ho";_romaji2kana["ho"]="ほ";
  104. _kana2romaji["ひゃ"]="hya";_romaji2kana["hya"]="ひゃ";
  105. _kana2romaji["ひゅ"]="hyu";_romaji2kana["hyu"]="ひゅ";
  106. _kana2romaji["ひょ"]="hyo";_romaji2kana["hyo"]="ひょ";
  107. _kana2romaji["ま"]="ma";_romaji2kana["ma"]="ま";
  108. _kana2romaji["み"]="mi";_romaji2kana["mi"]="み";
  109. _kana2romaji["む"]="mu";_romaji2kana["mu"]="む";
  110. _kana2romaji["め"]="me";_romaji2kana["me"]="め";
  111. _kana2romaji["も"]="mo";_romaji2kana["mo"]="も";
  112. _kana2romaji["みゃ"]="mya";_romaji2kana["mya"]="みゃ";
  113. _kana2romaji["みゅ"]="myu";_romaji2kana["myu"]="みゅ";
  114. _kana2romaji["みょ"]="myo";_romaji2kana["myo"]="みょ";
  115. _kana2romaji["や"]="ya";_romaji2kana["ya"]="や";
  116. _kana2romaji["ゆ"]="yu";_romaji2kana["yu"]="ゆ";
  117. _kana2romaji["よ"]="yo";_romaji2kana["yo"]="よ";
  118. _kana2romaji["ら"]="ra";_romaji2kana["ra"]="ら";
  119. _kana2romaji["り"]="ri";_romaji2kana["ri"]="り";
  120. _kana2romaji["る"]="ru";_romaji2kana["ru"]="る";
  121. _kana2romaji["れ"]="re";_romaji2kana["re"]="れ";
  122. _kana2romaji["ろ"]="ro";_romaji2kana["ro"]="ろ";
  123. _kana2romaji["りゃ"]="rya";_romaji2kana["rya"]="りゃ";
  124. _kana2romaji["りゅ"]="ryu";_romaji2kana["ryu"]="りゅ";
  125. _kana2romaji["りょ"]="ryo";_romaji2kana["ryo"]="りょ";
  126. _kana2romaji["わ"]="wa";_romaji2kana["wa"]="わ";
  127. _kana2romaji["を"]="wo";_romaji2kana["wo"]="を";
  128. _kana2romaji["が"]="ga";_romaji2kana["ga"]="が";
  129. _kana2romaji["ぎ"]="gi";_romaji2kana["gi"]="ぎ";
  130. _kana2romaji["ぐ"]="gu";_romaji2kana["gu"]="ぐ";
  131. _kana2romaji["げ"]="ge";_romaji2kana["ge"]="げ";
  132. _kana2romaji["ご"]="go";_romaji2kana["go"]="ご";
  133. _kana2romaji["ぎゃ"]="gya";_romaji2kana["gya"]="ぎゃ";
  134. _kana2romaji["ぎゅ"]="gyu";_romaji2kana["gyu"]="ぎゅ";
  135. _kana2romaji["ぎょ"]="gyo";_romaji2kana["gyo"]="ぎょ";
  136. _kana2romaji["ざ"]="za";_romaji2kana["za"]="ざ";
  137. _kana2romaji["じ"]="ji";_romaji2kana["ji"]="じ";
  138. _kana2romaji["ず"]="zu";_romaji2kana["zu"]="ず";
  139. _kana2romaji["ぜ"]="ze";_romaji2kana["ze"]="ぜ";
  140. _kana2romaji["ぞ"]="zo";_romaji2kana["zo"]="ぞ";
  141. _kana2romaji["じゃ"]="ja";_romaji2kana["ja"]="じゃ";
  142. _kana2romaji["じゅ"]="ju";_romaji2kana["ju"]="じゅ";
  143. _kana2romaji["じょ"]="jo";_romaji2kana["jo"]="じょ";
  144. _kana2romaji["だ"]="da";_romaji2kana["da"]="だ";
  145. _kana2romaji["で"]="de";_romaji2kana["de"]="で";
  146. _kana2romaji["ど"]="do";_romaji2kana["do"]="ど";
  147. _kana2romaji["ば"]="ba";_romaji2kana["ba"]="ば";
  148. _kana2romaji["び"]="bi";_romaji2kana["bi"]="び";
  149. _kana2romaji["ぶ"]="bu";_romaji2kana["bu"]="ぶ";
  150. _kana2romaji["べ"]="be";_romaji2kana["be"]="べ";
  151. _kana2romaji["ぼ"]="bo";_romaji2kana["bo"]="ぼ";
  152. _kana2romaji["びゃ"]="bya";_romaji2kana["bya"]="びゃ";
  153. _kana2romaji["びゅ"]="byu";_romaji2kana["byu"]="びゅ";
  154. _kana2romaji["びょ"]="byo";_romaji2kana["byo"]="びょ";
  155. _kana2romaji["ぱ"]="pa";_romaji2kana["pa"]="ぱ";
  156. _kana2romaji["ぴ"]="pi";_romaji2kana["pi"]="ぴ";
  157. _kana2romaji["ぷ"]="pu";_romaji2kana["pu"]="ぷ";
  158. _kana2romaji["ぺ"]="pe";_romaji2kana["pe"]="ぺ";
  159. _kana2romaji["ぽ"]="po";_romaji2kana["po"]="ぽ";
  160. _kana2romaji["ぴゃ"]="pya";_romaji2kana["pya"]="ぴゃ";
  161. _kana2romaji["ぴゅ"]="pyu";_romaji2kana["pyu"]="ぴゅ";
  162. _kana2romaji["ぴょ"]="pyo";_romaji2kana["pyo"]="ぴょ";
  163. _kana2romaji["ん"]="n";_romaji2kana["n"]="ん";
  164. _synth = new WorldSynth2(1024*16,1024*2,_jack_samplerate);//FIXME do not hardcode buffer lengths and FFT size
  165. connect(this,&UTAUSynth::logDebug,this,&UTAUSynth::on_logDebug);
  166. connect(this,&UTAUSynth::logError,this,&UTAUSynth::on_logError);
  167. connect(this,&UTAUSynth::logSuccess,this,&UTAUSynth::on_logSuccess);
  168. connect(this,&UTAUSynth::endOfThread,this,&UTAUSynth::on_endOfThread);
  169. }
  170. bool UTAUSynth::setScore(const QJsonArray &s)
  171. {
  172. if(_threadRunning) return false;
  173. _score = s;
  174. return true;
  175. }
  176. bool UTAUSynth::synthesize()
  177. {
  178. if(_threadRunning) return false;
  179. _threadRunning = true;
  180. if(_synth->currentTime())
  181. {
  182. _synth->reset();
  183. }
  184. _segments.clear();
  185. buildScore();
  186. QtConcurrent::run(this,&UTAUSynth::synthThread);
  187. return true; //will be scheduled if true
  188. }
  189. void UTAUSynth::synthThread()
  190. {
  191. SF_INFO info;
  192. memset(&info,0,sizeof(info));
  193. info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
  194. info.samplerate = _jack_samplerate;
  195. info.channels = 1;
  196. SNDFILE* sndfile = sf_open("/tmp/utau_synth.wav",SFM_WRITE,&info);
  197. int data_count = 1024;
  198. float* data = new float[data_count];
  199. while(1)
  200. {
  201. int result = readData(data,data_count);
  202. if(result) break;
  203. sf_write_float(sndfile,data,data_count);
  204. }
  205. sf_close(sndfile);
  206. delete[] data;
  207. emit endOfThread();
  208. }
  209. int UTAUSynth::readData(float *data, int size)
  210. {
  211. int fs = _jack_samplerate;
  212. if(size==0)
  213. {
  214. return 1;
  215. }
  216. for(int i=0;i<50;i++)
  217. {
  218. float current_f0 = 0;
  219. float current_time = _synth->currentTime()*1.0/fs;
  220. utau_note* note = nullptr;
  221. float end = _segments[_segments.length()-1]->end;
  222. for(int i=0;i<_segments.count();i++)
  223. {
  224. if(current_time >= _segments[i]->start && current_time < _segments[i]->end) { note=_segments[i]; break; }
  225. }
  226. if(current_time > end) return 1;
  227. if(note && note->oto)
  228. {
  229. // oto means sound
  230. oto_entry* oto = note->oto;
  231. int cepstrum_length=_currentUTAU->_reader->getCepstrumLength();
  232. float vvddata[cepstrum_length*2+1];
  233. current_f0 = note->f0;
  234. float x[3] = {note->start,
  235. note->start+oto->consonant,
  236. note->end};
  237. _currentUTAU->_reader->selectVVD(oto->vvd_index);
  238. float l = _currentUTAU->_reader->getSelectedLength();
  239. float c = l-oto->cutoff; //default case
  240. //c =
  241. float y[3] = {oto->offset,oto->offset+oto->consonant,c};
  242. float frame_period = _currentUTAU->_reader->getFramePeriod();
  243. float pos2 = interp_linear(x,y,3,current_time);
  244. float index = pos2 * 1000.0 / frame_period;
  245. bool valid = _currentUTAU->_reader->getSegment(index,vvddata);
  246. if(!valid) DEVLOG_ERROR("invalid segment");
  247. float* mel_cepstrum1 = &vvddata[1];
  248. float* mel_cepstrum2 = &vvddata[1+cepstrum_length];
  249. _synth->setF0(current_f0);
  250. _synth->setFrame(mel_cepstrum1,mel_cepstrum2,cepstrum_length);
  251. }
  252. else
  253. {
  254. //produce silence
  255. _synth->setF0(0);
  256. _synth->setSilence();
  257. }
  258. _synth->doSynth();
  259. if(_synth->isFilled(1024*2+size)) {
  260. _synth->pop(data,size);
  261. return 0;
  262. }
  263. }
  264. DEVLOG_ERROR("not a bug");
  265. abort();
  266. }
  267. void UTAUSynth::buildScore()
  268. {
  269. _segments.clear();//FIXME memory leak
  270. //UTAU has one segment per note
  271. DEVLOG_DEBUG("buildscore: "+STR(_score.count()));
  272. int lastNoteEnd=0;
  273. float tempo=0;
  274. float offset=0; //in seconds
  275. for (int i = 0; i < _score.count(); ++i)
  276. {
  277. auto o = _score[i].toObject();
  278. if(!o.contains(NOTE_KEY_NUMBER)) {
  279. tempo=o[TEMPO].toInt();
  280. continue;
  281. }
  282. int noteOffset = o[NOTE_PULSE_OFFSET].toInt();
  283. int noteLength = o[NOTE_PULSE_LENGTH].toInt();
  284. QString lyric = o[NOTE_LYRIC].toString();
  285. int notenum = o[NOTE_KEY_NUMBER].toInt();
  286. //lookup lyric -- if invalid :: create silence segment
  287. int rest = noteOffset-lastNoteEnd;
  288. if(rest<0)
  289. {
  290. DEVLOG_ERROR("overlapping notes");
  291. //return error
  292. }
  293. else if(rest>0)
  294. {
  295. utau_note* note = new utau_note;
  296. note->start=offset;
  297. float length_seconds = rest*60.0/tempo/480.0;
  298. offset += length_seconds;
  299. note->end=offset;
  300. note->lyric="";
  301. note->oto = nullptr;
  302. _segments.append(note);
  303. }
  304. utau_note* note = new utau_note;
  305. note->start=offset;
  306. float length_seconds = noteLength*60.0/tempo/480.0;
  307. offset += length_seconds;
  308. note->end=offset;
  309. note->lyric=lyric;
  310. note->f0 = frequencyFromNote(notenum);
  311. note->oto = _currentUTAU->getEntryByLyric(note->lyric);
  312. lastNoteEnd= noteOffset+noteLength;
  313. _segments.append(note);
  314. }
  315. }
  316. QString UTAUSynth::getTranscription(QString txt)
  317. {
  318. if(txt.split(" [").length()==2)
  319. return txt;
  320. if(_currentUTAU==nullptr)
  321. return txt;
  322. oto_entry* ent = _currentUTAU->getEntryByLyric(txt.trimmed());
  323. if(ent)
  324. {
  325. QString tmp = ent->name;
  326. if(_romaji2kana.keys().contains(tmp))
  327. tmp = _romaji2kana[tmp];//assume all UTAUs are Japanese
  328. return txt+"["+tmp+"]";
  329. }
  330. return txt;
  331. }
  332. bool UTAUSynth::doPhonemeTransformation(QStringList& list)
  333. {
  334. (void) list;
  335. return false;
  336. }
  337. bool UTAUSynth::setVoice(QString voiceName)
  338. {
  339. if(_voices.keys().contains(voiceName))
  340. {
  341. _currentUTAU = _voices[voiceName];
  342. return true;
  343. }
  344. else
  345. {
  346. _currentUTAU = nullptr;
  347. return false;
  348. }
  349. }
  350. QStringList UTAUSynth::listVoices()
  351. {
  352. if(_voices.keys().length()==0) scanUtauDir();
  353. return _voices.keys();
  354. }
  355. //??
  356. void UTAUSynth::on_logError(QString error)
  357. {
  358. _ctrl->logError(error);
  359. }
  360. void UTAUSynth::on_logSuccess(QString success)
  361. {
  362. _ctrl->logSuccess(success);
  363. }
  364. void UTAUSynth::on_logDebug(QString debug)
  365. {
  366. _ctrl->logDebug(debug);
  367. }
  368. void UTAUSynth::on_endOfThread()
  369. {
  370. _threadRunning = false;
  371. _ctrl->startOfflinePlayback("/tmp/utau_synth.wav");
  372. }
  373. bool UTAUSynth::setCacheDir(QString cacheDir)
  374. {
  375. (void) cacheDir;
  376. return true;
  377. }
  378. void UTAUSynth::scanUtauDir()
  379. {
  380. QStringList ret;
  381. QStringList searchPaths;
  382. searchPaths << QDir::home().filePath(".local/share/utau/voice");
  383. searchPaths << "/usr/share/utau/voice";
  384. foreach(QString searchPath, searchPaths)
  385. {
  386. QDir dir(searchPath);
  387. QDirIterator it(dir);
  388. while (it.hasNext())
  389. {
  390. QString vdir = it.next();
  391. if(QFileInfo(dir,vdir).isDir())
  392. {
  393. if(QFileInfo(dir,vdir+"/voices.json").isFile())
  394. {
  395. QFile jsonFile(dir.absoluteFilePath(vdir+"/voices.json"));
  396. if (jsonFile.open(QFile::ReadOnly))
  397. {
  398. QJsonDocument doc = QJsonDocument::fromJson(jsonFile.readAll());
  399. if(doc.isArray())
  400. {
  401. QJsonArray a = doc.array();
  402. for (int i = 0; i < a.count(); ++i)
  403. {
  404. QJsonObject o = a[i].toObject();
  405. QString name = o["name"].toString();
  406. if(o.keys().contains("utausynth_flags"))
  407. {
  408. UTAUDB* db = new UTAUDB(vdir);
  409. if(db->_reader->getSamplerate()==_jack_samplerate)
  410. {
  411. _voices[name] = db;
  412. }
  413. else
  414. {
  415. //this->logError("voice "+name+"has a different samplerate than jack, your utau resampler will fail");
  416. DEVLOG_DEBUG("not adding voice");
  417. }
  418. }
  419. }
  420. }
  421. }
  422. }
  423. }
  424. }
  425. }
  426. }