ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 노래가사 코드로 옮기기 1: Aespa, next level
    일상/취미생활 🥰 2021. 7. 24. 19:42

    * 코로나 시대, 개발자로서 취미를 발견했다...ㅎㅎ
    노래가사 프로그래밍 언어로 옮겨 써보기!! 해보면 생각보다 재미지다.
    Aespa 관련 다른 영상이나 자료는 보지 않았고, next level 무대랑 가사만 보면서 나름대로 세계관을 이해해보려 했다.
    코드는 실행해보지 않았고, 가사 의미를 해석해본 후 바로 쓴 거라 부정확하다.
    코드 쓰면서 아쉬웠던 점 중 하나는 짧은 영어 실력이었다. 원어민도 아니고, 영어 공부도 안 하다보니 선택할 수 있는 어휘가 제한적이었다.

    영어 공부 다시 시작해야지. 어디있는지도 모를 내 킨들.. 내일 찾아봐야겠다.

    * 예전부터 영화나 뮤비를 보고 해석하는게 재밌었다.
    무대를 몇 시간동안 돌려보면서 해석하고 코드 짜보니까 즐거우면서도..
    다 하고나서 살짝 현타왔다. 나 왜이렇게 열심히 했지??!
    대학교 때 "영상예술의 이해" 수업 과제하면서, 이터널 선샤인 여러번 돌려봤던거랑 또 다른 영화 수업 들으면서 다크나이트 여러 번 봤던 게 생각났다. 힘들었지만 그 시절을 기억나게 하는 아련한 추억들이다.
    친구랑 영화관에서 영화보고 얘기했던 것도 생각났다. 함께 이야기 나누었던 영화 중 가장 기억에 남는 영화는 "베스트 오퍼"다. 마지막에 충격받고 망연자실한 표정의 주인공이 기구? 속에서 뱅글뱅글 돌아가는 장면이 기억에 남는 영화다. 이제는 코로나 때문에 영화관에 가지 않은지 오래라 더 아쉬운 기억이 되었다.

    * 작품은 작가의 품을 떠나면 독자 읽기 나름이 된다.

    롤랑바르트가 '작가는 죽었다'라고 말한 내용이다.

    작가가 무엇을 의도했든 나는 일단 이렇게 해석했다.
    간단하게 내가 해석한 것들을 말하자면
    next level: 블랙맘바와의 전투 상태 돌입, 긴장 상태가 +1 된거라 보았다
    블랙맘바는 본래 나비스이자, 에스파를 성장으로 이끄는 존재라고 해석했다. 어디서 봤는데 광야의 위치가 뮤비에서 SM 신사옥이라고 했다. 광야는 블랙맘바의 홈그라운드이고. 블랙맘바는 사실 긍정적인 존재가 아닐까?
    아직 저 너머의 문을 연다는 말의 뜻은 모른다. 다만 에스파에게는 일차 성공이라는 의미?정도로 파악했다
    "감정들을 배운 다음" 구절 무슨 의미인지 모름 + 코스모랑, P.O.S.도 모른다.
    "광야의 것 탐내지 마라"는 경고는 그리스로마 신화의 오르페우스와 에우리디케의 이야기를 떠오르게 한다. 지상에 나갈 때까지 뒤를 돌아보지 말라고 했는데 결국 뒤를 돌아보아 아내를 잃은 오르페우스 이야기. 비슷하지 않다고도 할 수 있겠지만 약속을 했고, 이 약속을 어기면 큰 화를 얻게 된다는 점에서 생각났다.

     다시 생각해보니 오르페우스 이야기가 잘 생각나지 않아 비슷하지 않은 것 같기도 하다!ㅠㅠ 먹지 말라고 했는데 먹는다는? 그런 내용의 신화도 있었던 것 같다. 이 신화와 더 비슷한것 같은데 내용이 잘 생각나지 않는다. 나중에 기회되면 다시 생각해봐야겠다. 

    * 에스파의 다른 노래는 들어본 적이 없다. next level만 들어봤다. ( 요즘 노래 잘 모르는 1인 )
    내가 인디나 재즈 위주로 들어서 그런지 모르겠지만
    노래가 정말 특이한 것 같다. 특히 이수만씨가 분노의 질주 보면서 ost로 쓰인 곡을 사올 생각을 했다는게 놀라웠다.👍
    AI 같이 외모도 완벽, 노래랑 춤 실력도 완벽한데 그룹 컨셉에 AI 친구까지 있다는게 변한 시대를 실감나게 한다.
    노래도 AI가 부른 것 같다 😲

    한편으로는 씁쓸하다. 다양성을 존중하기 보다 한 가지 모습의 완벽을 추구하는 시대를 반영하는 것 같다.

    가사에 "감정들을 배운 다음"이라는 구절이 있지만,

    AI 친구까지 가세해 더욱더 완벽한 느낌을 만들어 감정을 배제하고 이성을 중시하는 느낌이다.

    노래에는 감정이 필수인데, 컨셉이 감정을 제거해 모순을 만들어내는게 아닌가 싶다.

    간단히 말해 컨셉이 너무 과해지면 인간미가 없어질 것 같다.

    이런 컨셉이 앞으로 더 많아지고 심화된다면 어떻게 될까?

    사람들이 점점 더 AI가 만들어내는 노래를 즐기고, 사람이 만들었더라도 AI가 만든 느낌의 노래가 유행하는 시대가 된다면,

    인간의 감성도 이미 변해 이를 즐기고 있을 것 같다. 이에따라 다른 것들도 변해있을 것 같다.

    거부할 수 없는 변화의 흐름인 것 같지만, 장기적으로는 걱정된다. 괜한 걱정이길!

     

    * 코드로 옮긴 노래는 다음과 같다

    interface Weapon {
        name: string;
        wield: ()=>void;
    }
    
    const unity: Weapon = {name: 'unity', wield() {console.log('Beat it!');}};
    
    /*
    * 모드의 종류: 평상시 모드, 전투 모드, 위기 모드, 코스모 모드
    * next level => combat, crisis 모드로 나뉜다
    */ 
    enum AlertLevel {
        Common, Combat, Crisis, Kosmo
    }
    
    // rule 종류
    type Rule = "ABSOLUTE" | "CHAOS";
    
    class Aespa {
    		// default value들
        public alertLevel: AlertLevel = 0;
        public rule:Rule = "CHAOS";
        public power:number = 1;
        public location:string = 'REAL WORLD';
        public hands: Hands = new Hands(); // ae와의 결속력 상태를 의미
        constructor(public weapon:Weapon) {}
    
        alertLevelToCombat() { // I'm on the next level: 전투태세 모드로 올리기
            this.alertLevel=1;
            this.rule = "ABSOLUTE";
            this.hands.tight();
            this.power++;
        }
        alertLevelToCrisis() {
            this.alertLevel=2;
        }
        goTo(location: string) {
            this.location = location;
        }
        evolve(suffer:object) {
            this.power++;
        }
        getOver1() { // 의지를 다지는 말 => 메서드 이름 뭘로 하지?
            console.log("I'll never give up");
            console.log("I'll destroy you in the end");
            this.weapon.wield();
        }
    		// 상태가 변하는건 아니라서 로그만 찍음
        getOver2() {
            console.log(`Even the unbearable despair, \n
    				Can't break my faith. \n
    				Even if a more painful trial comes \n
    				I won't let go of your hand \n
    				Watch me while I work it out`);
        }
        provoke() { // 도발은 부정적인 의미긴 하지만 다른 말이 떠오르지 않아... 짦은 영어의 아쉬움
            console.log('to BlackMamba,');
            console.log('After learning the feelings');
            console.log('Watch me while I work it out.')
        }
        tellBlackMamba(talk:string) {
            console.log(talk);
        }
        tellNaevis(talk:string) {
            console.log(talk);
        }
        feel(feeling:string) {
            console.log(feeling);
        }
        openTheDoor(blackMamba:BlackMamba) {
            blackMamba.wane();
            return "light as fire";
        }
        say(talk:string) {
            console.log(talk);
        }
        callAE() {console.log('ae~!')}
        openP_O_S() {
            this.goTo('REAL WORLD');
        } 
    }
    
    class Hands {
        public status:string = 'lose';
        tight() {
            status= 'tight';
        }
        lose(aespa: Aespa) {
            status = 'lose';
            aespa.alertLevelToCrisis();
        }
    }
    
    class Naevis {
        constructor() {}
        lead() {
            console.log("I'm you're naevis.");
            console.log('follow me');
        }
        advise() {
            console.log(` Never look back. \n
            Don't covet things of KWANGYA \n
            If the promises are broken, everything will be out of control.`)
        }
        tellAespa(talk:string) {
            console.log(talk);
        }
    }
    
    // BlackMamba의 본질은 Naevis가 아닐까. 고난을 주면서 성장으로 이끄는..?
    class BlackMamba extends Naevis {
        public HomeGround:string= 'KWANGYA'; // 광야는 BlackMamba의 home ground
        public signal:string= 'stable'; // BlackMamba의 힘의 지표는 signal 안정성?
        offense() {
            console.log('black out');
            console.log('deep and strong temptation'); // 유혹은 깊고 진해
            return {suffering:true, sorrow: true};
        }
        hallucinate(aespa: Aespa) {
            aespa.feel('lose balance and voice'); // 느낌은 다양하니까 string으로 준다
            aespa.feel('being criticized and alienated');
        }
        wane() {
            this.signal = 'unstable';
            console.log('Too hot too hot'); // BlackMamba의 고통스러운 비명?!
        }
    };
    
    const backGround = {
        brightness:'bright',
        bgm() {console.log('Ooh ooh wee')},
        lalala() {console.log('La la la')},
        blackOut() {this.brightness = 'dark'}
    }
    
    /**
     * START!
     */
    // Aespa 세계관에 감정이입하기
    const my = new Aespa(unity); // 결속은 나의 무기
    const blackMamba = new BlackMamba();
    
    my.alertLevelToCombat(); // I'm on the next level (블랙맘바와의 전투태세 단계 돌입)
    my.goTo(blackMamba.HomeGround); // 광야로 걸어가, 알아 네 homeground
    my.weapon.wield(); // 위협에 맞서서 제껴라 제껴라 제껴라
    
    backGround.bgm();
    
    const suffer = blackMamba.offense(); // too hot too hot
    
    backGround.bgm();
    
    my.hands.lose(my); // 맞잡은 손을 놓쳐
    my.getOver1(); // 널 결국에 내가 부셔
    
    backGround.lalala();
    
    // BlackMamba는 Naevis, 고난으로 성장시킴
    const naevis = new Naevis();
    my.evolve(suffer); // Aespa said, "I see the NU EVO". 적대적인 고난과 슬픔은 널 더 popping 진화시켜 (naevis가 말함)
    naevis.lead(); // That's my Naevis. It's my Naevis. You lead, we follow
    my.provoke(); // Watch me while I make it out
    
    my.getOver2();
    
    console.log('Naevis Calling'); // Naevis가 부른다
    
    naevis.advise(); // 광야의 것 탐내지 마라
    blackMamba.wane();
    my.tellBlackMamba("I'll destroy you in the end. Come on! Show me the way to KOSMO!");
    
    blackMamba.hallucinate(my);
    
    naevis.tellAespa('Call ae');
    my.callAE();
    my.openP_O_S(); // This is the REAL WORLD, I'm awake
    
    backGround.bgm();
    
    const light = my.openTheDoor(blackMamba); // too hot too hot
    my.say("I'm dying to know the next story that will unfold.");
    
    my.alertLevelToCombat(); // I become stronger and free. I'm no longer who I was at KWANGYA
    my.feel('beast'); // 야수 같은 나를 느껴

    댓글

Designed by Tistory.