ironsource mediation(Unity LevelPlay)를 사용해서 페이스북(Meta) 광고 테스트를 진행중이었는데

무슨 수를 써도 안되서 한참 해매다

비즈니스 설정에 테스트할 페이스북 계정을 추가하고

앱 - 앱 테스트를 활성화해주니 잘됨;;

'공부 > 프로그래밍' 카테고리의 다른 글

c# reference source  (0) 2019.07.08

Unity 버전을 2021.3에서 2022.3대로 올리고 나서
잘 사용중이던 쉐이더가 디바이스에서 마젠타로 보이는 문제가 생겼다.

뭔일인지 감이 안잡혀서 한참 해매다가 찾아서 기록함

Tags에

 "RenderPipeline" = "UniversalRenderPipeline"

 

 

라고 사용중이었는데

 "RenderPipeline" = "UniversalPipeline"

 

로 바꾸니 잘됨

 

 

Replaced "RenderPipeline" = "UniversalRenderPipeline" with "RenderPipeline" = "UniversalPipeline" as requested by Felipe. by oleks-k · Pull Request #1431 · Unity-Technologies/Graphics (github.com)

 

Replaced "RenderPipeline" = "UniversalRenderPipeline" with "RenderPipeline" = "UniversalPipeline" as requested by Felipe. by ole

Replaced "RenderPipeline" = "UniversalRenderPipeline" with "RenderPipeline" = "UniversalPipeline" as requested by Felipe.

github.com

 

 

'공부 > Unity3D' 카테고리의 다른 글

TimelineCopyTool  (0) 2021.06.28
Unity Path  (0) 2021.05.24
Unity Android Profiler 동작 안될때  (0) 2020.02.13
Eyetracking + Blinking  (0) 2019.06.26
NGUI 한글 마지막 글자 짤리는 문제  (0) 2018.03.21

wlsdml1114/diff-svc: Singing Voice Conversion via diffusion model (github.com)

yaiconwithminsu/model: 노래민수야고마워 모델 (Diff-SVC) (github.com)

인공 르르땅으로 핫한 Diff-svc 학습방법(로컬 환경, 집 컴퓨터) - YouTube

내 목소리로 노래하는 AI 만들기 - YouTube

(위에 전부 링크들임)

 

 

wlsdml1114/diff-svc: Singing Voice Conversion via diffusion model (github.com) 을 기반으로
위 GitHub 및 영상들을 참고하여 적용해보았음.

 

==========================================================================================

23.07.30 - 1일차

점심에 할게 없어서 함 해볼까 싶어서 일단 시작

1. 아나콘다3 설치 (https://www.anaconda.com/products/distribution)
- 환경 변수 자동 설정 옵션만 키고 다음 다음 눌러서 설치

2. ffmpeg 설치 (https://www.gyan.dev/ffmpeg/builds/)
- mp4, avi 등 영상 파일에서 소리만 추출 할 때와 결과물과 음악을 합칠 때 사용

3. CUDA 설치 (https://developer.nvidia.com/cuda-11-6-2-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exe_local)

4. 위의 wlsdml1114/diff-svc: Singing Voice Conversion via diffusion model (github.com) Repository Clone함

5. Checkpoint 다운로드
- Nsf Hifigan만 받구 했었는데
binarize때였나 training때였나 에러가 나서 뭐지 싶었는데
로그에서 Hubert를 찾으려다 실패한듯 보여 Hubert도 받아서 넣어주니 잘 됨

 

* 환경 설정 파트

6. Anaconda 관리자 권한으로 prompt 실행 후 clone받은 프로젝트 폴더로 이동

7. conda create -n diff-svc python=3.9
conda activate diff-svc

8. pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
pip install -r requirements.txt

9. 설치 완료 후
set PYTHONPATH=.
set CUDA_VISIBLE_DEVICES=0

 

10. 학습용 파일 10개 제작.
(자료 찾고 받고 만드는데만 4시간 쓴듯..)

다시보기 파일을 준비해서

 

적당히 노래부르는 부분을 자른다.


- 내가 가진 영상 편집 프로그램이 따로 없어서 윈도우에 탑재되어 있는 프로그램을 썼더니 해상도 최저치가 540이라 시간을 많이 잡아먹음.. (10번같은 경우 짧아졌는데 용량이 더 커진다던지 이런일이 생김 ㅠ)
- 이제와서 생각해보면 에코나 배경음이 안들어간 그냥 말하는 부분도 준비하는게 좋았을듯

 

자른 영상에서 오디오만 추출

 

준비된 데이터들

 

 

 

11. preprocess 폴더에 제작한 학습용 파일들 다 넣음

12. 걍 python sep_wav.py 때림

15. training폴더의 config_nsf.yaml에서 설정을 바꿈
- config_nsf.yaml 파일 내용 (아래 내용들은 바꾸기 전 내용들. 항목 참고용으로 남김)

config_nsf.yaml
##################################################################################
## original wav dataset folder
## 3번에서 자르고 변환한 결과 wav파일들을 학습데이터로 만들기위해 넣어줄 폴더 이름
raw_data_dir: data/raw/test
## after binarized dataset folder
## 위 폴더에 있는 학습데이터들을 실제 학습에 사용하기위해 binarize한 결과물을 저장할 폴더
binary_data_dir: data/binary/test
## speaker name
## 이건 나중에 결과물 뽑을 때 쓰게될것
speaker_id: test
## trained model will be save this folder
## 학습데이터로 학습한 모델을 저장할 장소
work_dir: checkpoints/test
## batch size
## 모델이 한번에 학습할 양을 정한다 (CUDA out of memory에러가 나면 이 숫자를 줄이면 된다)
max_sentences: 10
## AMP(Automatic Mixed Precision) setting(only GPU) for less VRAM
## AMP를 사용할것인지 설정, 학습시간에 차이는 없지만, 한번에 더 많은 batch를 학습시킬 수 있음.
use_amp: true
load_ckpt: checkpoints/nehito_44khz/nehito_ckpt_steps_1000000.ckpt
##################################################################################

14. preprocess_out 폴더 하위의 final, voice 등 폴더에 파일들이 생성되어 있는데,
voice폴더의 파일들이 적합하지 않을까 싶어서 이것들을 위에 설정한 raw_data_dir폴더로 옮겨줌

15. python preprocessing/binarize.py --config training/config_nsf.yaml

 

* 학습 시작

16. python run.py --config training/config_nsf.yaml --exp_name test --reset
(자기 직전에 시작해서 출근 직전까지 8시간 정도 돌리다가 일단 종료하고 출근함. 대충 30,000 스텝 좀 넘게 돈걸로 기억)
python run.py --exp_name test로 재시작 확인까진 함

 

 

23.07.31 - 2일차

퇴근하구 가서 마저 해보자.
참고한 글들을 다시 보다보니 위의 작업에서 model을 nehito를 사용했는데,
여자 목소리는 liee가 더 적합하다는 듯하다. 결과물을 일단 보고 이상하면 다시해보자.

학습 돌리다가 어느 순간되면 띵! 하고 끝나는 줄 알았는데 아닌가보다.
집에가서 결과물을 한번 뽑아보자

* Tensorboard
일단 시각화해서 보는게 편할듯해서 Tensorboard 설치함

pip install tensorboard

# 설치 후
tensorboard --logdir=checkpoints/test/lightning_logs/lastest

흠 아직 갈 길이 멀다.. 거의 무슨 기계음이 전부이다
(gt와 밑에 음성이 비슷할수록 잘된거라 한다. gt_0과 wav_0을 들어보니 못알아먹을 수준이었다)
이렇게된거 liee로 바꿔서 다시 해보자
liee는 여기서 받았다.
Release LIEE_DIFF-SVC_AI_V2 · julieraptor/LIEE-DIFF-SVC-AI (github.com)

 

23.08.01 - 3일차

아침에 일어나서 확인

 

비슷은 한데... 
아직 좀 아쉽다. 하루정도만 더 돌려보자.

뭔가 아쉬워서 결과물 하나 뽑아보려는데 에러가 남.
우선
raw 폴더에 원본 파일을 넣고,
infer.py 코드를 수정한다.
(77 line의 model_path값에 지금 뽑힌 체크포인트 최신으로 바꿔준다던지 등등)

python infer.py

돌렸는데,
AssertionError: | ckpt not found in checkpoints/0102_xiaoma_pe/model_ckpt_steps_60000.ckpt.
에러가 난다. 일단 찾아서 넣어주고 돌림
(Releases · MoonInTheRiver/DiffSinger (github.com) 여기서 받음)

결과물 나쁘지 않음. 아직 기계음이 중간중간 섞이는데 더 돌리면 되는건가?
일단 오늘 하루 풀로 돌려보고 회사에서 몰래몰래 찾아봐야겠다
결과물이 flac으로 나와서

#파일 변환
ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3

#합치기.
ffmpeg -i input.mp3 -i bgm.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" -map "[a]" -ac 2 output.mp3

ffmpeg로 파일 변환 후 bgm과 합침

집에 도착해서 확인하니 44,000스텝에서 멈춰있다 머지???
일단 44,000 기준으로 결과물을 한번 더 뽑아 확인해보니 목소리 자체는 만족할만한 퀄리티가 나왔는데
피치나 기계음이 좀 섞이는게 맘에 안들어서 오늘 밤까지만 더 돌려보자

오후 9시 44분 - 46,000스텝 기준으로 정말 훌륭한 결과가 나왔으나 아직 튀는 구간이 좀 있다

 

23.08.02 - 4일차

마찬가지로 아침에 일어나서 확인..

78,000스텝

결과물이 맘에 든다.
기계음도 상당수 개선되어 결과물을 한번 뽑아보자

거의 다 온거 같은데 살~~~~짝 맘에 안든다.
오늘은 끄고 출근하고 밤에만 돌려보자

회사에서 비는 시간에 자료를 좀 더 찾아봤는데,
lr값을 낮춰 더 정확하게 할 수 있다고 한다.
0.0001 까지 미세 조정해가는게 좋다한다.
위의 스크린샷을 통해 내 세팅을 확인해보니 0.0008이다. 집에가서 0.0003정도로 낮춰서 해보자.

 

23.08.03 - 5일차

자기 직전 lr값을 0.0001로 낮췄는데 돌리니까 0.0002로 표시된다.
일단 걍 돌리고 일어났더니 114,000 스텝까지 쌓여있다.
결과물이 많이 정교해졌으나 아직 조금조금 튀는데 금요일까지만 돌려보고
계속 그러면 이정도는 직접 조정하는게 맘 편할듯하다

 

23.08.04 - 6일차

158,000 스텝까지 옴.
거의 다 온거 같은데 오늘 하루종일 한번 돌려보고 마무리 하면 될듯?

20만 스텝 기준으로 나쁘지는 않은데 60만까지 한번 해보자

 

23.08.06 - 8일차

30만 스텝임
저음 및 일반적인 음역대는 완벽할지두??
고음이 소스가 없어서 좀 이상함
소스를 찾아 추가해보자

그리고 목소리만 있는 깔끔한 소스를 쓰지 않은 탓 + 고음 소스가 없는 탓인지
결국엔 태어나서 한번도 안해본 믹싱 연습을 하게 되는듯..?

스텝 목표치는 60만

 

 

 

23.08.07 - 9일차

퇴근 시간이 다가오기에 고음 고민하면서 농땡이 피우고 있는데 이런걸 찾음

 

음향 엔지니어가 알려주는 AI 보컬믹싱 1편 - (재료준비와 소리섞기) - AI 음성 채널 (arca.live) - 링크

음역대+데이터 늘려주는 코드 - AI 음성 채널 (arca.live) - 링크

 

확인해보자

 

 

제대로 학습되고 있는지 확인을 위해


보컬의 특징을 잘 학습 못하는것 같은 문제 - AI 음성 채널 (arca.live) - 링크

 

이것두 확인해보자

 

----------------------------------------------------------------------------------------------------------------

여러 시도를 더 했었지만 데이터 소스가 부족해서 그런지 실패하고 (비슷하게는 나오는데 결과물이 맘에 안든다)
그냥 테스트 삼아 돌려본 RVC가 훨씬 좋은 퀄리티가 나왔다...
DIFF-SVC는 더이상 사용하지 않을듯

openssl req -x509 -sha256 -days 3650 -nodes -newkey rsa:2048 -subj "/CN=192.168.50.206/C=US/L=San Fransisco" -keyout C:\temp\jenkins_key.key -out C:\temp\jenkins_cert.crt


openssl pkcs12 -export -in "C:\temp\jenkins_cert.crt" -inkey "C:\temp\jenkins_key.key" -out "C:\temp\jenkins.pfx"


keytool -importkeystore -srckeystore "C:\temp\jenkins.pfx" -srcstoretype pkcs12 -destkeystore "C:\temp\jenkins.jks" -deststoretype jks

중간에 JDK 이슈가 있어서 JDK를 한번 받아서 다시 시도했었음

'공부' 카테고리의 다른 글

jar plugin exclude BuildConfig  (0) 2021.12.13
git ignore 목록 사이트  (0) 2019.01.09
Adaptive Scalable Texture Compression (ASTC Format)  (0) 2017.12.01
ios Push 관련 코드 저장용  (1) 2017.06.16
git branch 삭제 후 복구 하기  (0) 2017.05.17
buildFeatures {
    buildConfig = false
}

build.gradle에 추가

 

https://developer.android.com/studio/releases/gradle-plugin#buildFeatures

 

'공부 > Unity3D' 카테고리의 다른 글

URP shader tag 관련 기록용  (0) 2023.09.12
TimelineCopyTool  (0) 2021.06.28
Unity Android Profiler 동작 안될때  (0) 2020.02.13
Eyetracking + Blinking  (0) 2019.06.26
NGUI 한글 마지막 글자 짤리는 문제  (0) 2018.03.21

 

출처 - https://codetime.tistory.com/633

 

[Unity 2020] android profier 연결 관련 정리

유니티 에디터 종료 윈도 검색 - cmd 실행 adb kill-server adb start-server ------------- ※ forward 진행 전 처리 netstat -a -o -n | find "34999" (나온 리스트 맨 오른쪽이 process_id) taskkill /F /PID p..

codetime.tistory.com

 

============================================================================================

출처 - https://lunchballer.com/archives/72

 

[Android] Connect Unity Profiler to Mobile Device

#유니티 프로파일러를 모바일 디바이스에 연결하기 There is a good descrption about how to remote profiling on device on Unity Manual page (Link). However, sometimes it doesn’t work like that if you miss some parts …

lunchballer.com

 

#유니티 프로파일러를 모바일 디바이스에 연결하기

There is a good descrption about how to remote profiling on device on Unity Manual page (Link). However, sometimes it doesn’t work like that if you miss some parts or mix the procedure.  This is easy steps you can follow.

  • Build with option check ‘Development Build’ on Build Settings. (빌드 세팅에서 Development Build 체크해서 빌드하기)
  • Install the app just built. (디바이스에 앱 설치)
  • Check the cable connection between PC/Mac and the device. (케이블이 컴퓨터와 디바이스사이에 잘 연결되어 있는지 확인)
  • Open any command console on PC/Mac (커맨드창 열기)
  • Check if the device is detected through adb command. (아래 명령어를 쳐서 디바이스 인식 확인)
    • > adb devices

if any device is not attached, you should check if the device driver is installed properly.

  • Open adb tunnel between Unity Editor and the installed app (유니티 에디터와 앱 사이에 adb 터널링 만들기)
    • > adb forward tcp:34999 localabstract:Unity-{insert bundle identifier here}
    • if unity version is under Unity 5.x, then port number is 54999. (5.x 버전일 경우 포트 54999)
  • Start Unity editor. (Don’t start Unity editor before adb tunneling) (유니티 에디터 시작. adb 터널링 전에 유니티 에디터를 먼저 시작하지 말것)
  • Open Profiler window ( Unity top menu: Window > Profiler ) (프로파일러 윈도우 열기)
  • Select the AndroidProfiler(ADB@127.0.0.1:34999) on Active Profiler dropdown menu (Active Profiler 드롭다운 메뉴에서 AndroidProfiler 선택)

Profiler dropdown menu

  • You should see cpu, memory, and various graphs from there. (그래프들이 표시되면서 프로파일링이 잘 되는지 확인)

  • If not showing any graph, or if active profiler is not AndroidProfiler(ADB@127.0.0.1:34999), then follow below steps. (만약 그래프가 안보이거나 AndroidProfiler가 선택이 안되다면,)
  • Stop/close Unity editor process completely. (RESTART STEP) (유니티 에디터 종료)
  • Restart adb server (adb 서버 재시작)
    • > adb kill-server
    • > adb start-server
  • Open adb tunnel again. (다시 adb 터널링)
    • > adb forward tcp:34999 localabstract:Unity-{insert bundle identifier here}
  • Start Unity editor. (유니티 에디터 시작)
  • Open Profiler window. (프로파일러 윈도우 열기)
  • Select the AndroidProfiler(ADB@127.0.0.1:34999) on Active Profiler dropdown menu. (Active Profiler에서 AndroidProfiler 선택)
  • You should see various graphs now. (프로파일링 되는지 확인)
  • You might disconnect the tunnel if you unplug your device from PC/Mac. Then follow steps from “RESTART STEP” again. (디바이스를 컴퓨터에서 뽑았을때 터널링이 끊겼을 수 있으므로 RESTART STEP으로 부터 다시 세팅)

  • If you are still not seeing any profiling results, then check firewall port settings. (그래도 안되면, 방화벽 포트 세팅 확인)
    • (Windows) Control panels > System and security > Windows firewall > Advanced settings
      • Click Outbound Rules
      • Click New Rule… on Actions
      • Port
        • TCP / 54998-55511
      • Set any name such as UnityRemoteProfiling.
  • Then follow steps from “RESTART STEP” again.

 

-------------------------------------------------------------------------------------------------------------------------------------------------

이도저도 하다 안되면 BuildAndRun으로 빌드해서 터널링을 만들고하면 되는 경우도 있음

 

 

+ 23.07.25) 위에 방법들 시도해도 전부 안될때,

BuildAndRun 안하고 걍 핸드폰의 USB디버깅을 껏다 키고 다시 허용하면 되는듯?

'공부 > Unity3D' 카테고리의 다른 글

TimelineCopyTool  (0) 2021.06.28
Unity Path  (0) 2021.05.24
Eyetracking + Blinking  (0) 2019.06.26
NGUI 한글 마지막 글자 짤리는 문제  (0) 2018.03.21
Unity 3D 에서 구글 스프레드 시트로 로그 보내기  (0) 2018.02.02

'공부 > 프로그래밍' 카테고리의 다른 글

페이스북(Meta) 테스트 광고 관련(iOS)  (0) 2023.12.27

using UnityEngine;
using System.Collections;

public class EyeTrackBlink : MonoBehaviour
{
   
    public float eyeMaxOffset = 0.3f; // max amount the eyes are clamped to
    public Renderer eyeRend; // eyeball renderer
    public Renderer lidRend; // eyelid renderer
    public float blinkingTextureAmount = 4f; // amount of frames of blinking animation
    public float blinkTimer = 4f; // timer for when to blink again
    public float blinkTransition = 0.05f;
    Vector2 eyeOffset;
    Vector2 eyelidOffset;
    float blinkOffset;
    float blinkTimerR;
   
    void Start()
    {
        blinkTimerR = blinkTimer;
        blinkOffset = 1 / blinkingTextureAmount;
        eyelidOffset = new Vector2(0,0);
        lidRend.materials[1].SetTextureScale("_MainTex", new Vector2(blinkOffset, 1));

    }
    void Update()
    {
        blinkTimerR -= Time.deltaTime;
        if (blinkTimerR <= 0.0f)
        {
            StartCoroutine(Blink());

        }
      
        eyeOffset = new Vector2(transform.localPosition.x, -transform.localPosition.y);
           // clamp so the eye doesnt disappear  
        if(eyeOffset.x < -eyeMaxOffset || eyeOffset.x > eyeMaxOffset)
        {
            eyeOffset.x = Mathf.Clamp(eyeOffset.x, -eyeMaxOffset, eyeMaxOffset);
        }
         if(eyeOffset.y < -eyeMaxOffset || eyeOffset.y > eyeMaxOffset)
        {
            eyeOffset.y = Mathf.Clamp(eyeOffset.y, -eyeMaxOffset, eyeMaxOffset);
        }
       // send offset to shader
        eyeRend.material.SetTextureOffset("_MainTex", eyeOffset);
        
    }

    IEnumerator Blink()
    {
        // animating 1 - 2 - 3 - 4 - 3 - 1, if you have more or less blinking animation frames, add or delete them here
        blinkTimerR = blinkTimer + Random.Range(-1,1); // slight randomisation to the blinking
        lidRend.materials[1].SetTextureOffset("_MainTex", eyelidOffset); //1
        yield return new WaitForSeconds(blinkTransition);
        lidRend.materials[1].SetTextureOffset("_MainTex", new Vector2(eyelidOffset.x + blinkOffset, 0)); //2
        yield return new WaitForSeconds(blinkTransition);
        lidRend.materials[1].SetTextureOffset("_MainTex", new Vector2(eyelidOffset.x + (blinkOffset * 2), 0)); //3
        yield return new WaitForSeconds(blinkTransition);
        lidRend.materials[1].SetTextureOffset("_MainTex", new Vector2(eyelidOffset.x + (blinkOffset * 3), 0)); //4
        yield return new WaitForSeconds(blinkTransition);
        lidRend.materials[1].SetTextureOffset("_MainTex", new Vector2(eyelidOffset.x + (blinkOffset * 2), 0)); //3
        yield return new WaitForSeconds(blinkTransition);
        lidRend.materials[1].SetTextureOffset("_MainTex", eyelidOffset); //1
       

    }
}

 

 

출처 : https://twitter.com/minionsart/status/948235509825966080

 

Joyce[MinionsArt] on Twitter

“Using SetTextureOffset to animate a texture sheet, and track an object with eyes in #unity3d, like in Legend of Zelda - Twilight Princess #gamedev #unitytips #indiedev Sample code in first reply More stuff > https://t.co/FqAsMb9Plg https://t.co/9ES4iBrsX1

twitter.com

 

- 추가

위 자료처럼 분리해서 위치를 잡아준 뒤, Unity Timeline상에서 Material의 Offset값을 애니메이션하여 적용함

+ Recent posts